我想编写一个触发器(使用 MySQL),在将记录输入用户表之前检查用户是否超过特定年龄。否则,请勿将该记录输入表中。
我最初尝试了
CHECK
约束,但不允许存储过程、函数等,所以我正在尝试触发器。
到目前为止,我已经
DELIMITER //
CREATE TRIGGER t_age_check
BEFORE INSERT
ON users
FOR EACH ROW
BEGIN
DECLARE dob DATE;
IF
YEAR(FROM_DAYS(DATEDIFF(NOW(), dob))) + 0 >= 18 THEN
INSERT INTO users
END IF
END//
DELIMITER ;
但我不确定这是否正确或有效。我以前从未写过触发器(而且我对 SQL 很陌生),但我想我在理论上理解它。任何有关解决此问题或更好的替代方案的帮助将不胜感激!
插入,但如果数据有效,则让它继续。 使用
NEW.<column_name>
引用尝试插入的当前行的列。我假设您的
users
表有一个名为 DATE
的 dob
列。例如:
DELIMITER //
CREATE TRIGGER t_age_check
BEFORE INSERT
ON users
FOR EACH ROW
BEGIN
IF NEW.dob > CURDATE() - INTERVAL 18 YEAR THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Users must be at least 18 years of age';
END IF;
END//
DELIMITER ;