假设有一个名为"user"的MySQL表,包含以下列:
- id:用户id,自增主键
- name:用户名
- email:用户邮箱
- age:用户年龄
CREATE TABLE user (id INT PRIMARY KEY,username VARCHAR(50),password VARCHAR(50),email VARCHAR(50)
);
现在,我们将创建一个触发器,用于在插入新用户时自动计算用户年龄是否大于18岁,并将结果存储在另一个表中。
首先,创建一个存储年龄计算结果的表"age_results",包含以下列:
- id:主键
- user_id:用户id
- is_above_18:是否年满18岁(0表示未满18岁,1表示年满18岁)
CREATE TABLE age_results (id INT AUTO_INCREMENT PRIMARY KEY,user_id INT,is_above_18 INT
);
接下来,创建触发器,命名为"check_age_trigger",在"user"表上的插入操作时触发:
CREATE TRIGGER check_age_trigger
AFTER INSERT ON user
FOR EACH ROW
BEGINDECLARE user_age INT;SET user_age = TIMESTAMPDIFF(YEAR, NEW.age, CURDATE());IF user_age >= 18 THENINSERT INTO age_results (user_id, is_above_18) VALUES (NEW.id, 1);ELSEINSERT INTO age_results (user_id, is_above_18) VALUES (NEW.id, 0);END IF;
END;
触发器中的逻辑如下:
- 获取插入操作的新用户的年龄,并计算年龄差值(用户年龄到当前日期的年数差)
- 如果年龄差值大于等于18,则将用户id和1(表示年满18岁)插入"age_results"表
- 否则,将用户id和0(表示未满18岁)插入"age_results"表
现在,每当向"user"表插入一条新用户记录时,触发器会自动计算用户年龄是否大于18岁,并将结果存储在"age_results"表中。