三、示例:创建触发器
1、行级触发器(FOR EACH ROW)
sql
CREATE TRIGGER log_user_insert
AFTER INSERT ON users
FOR EACH ROW
BEGIN
INSERT INTO user_log (user_id, action, timestamp)
VALUES (NEW.user_id, 'INSERT', NOW());
END;
插入 `users` 表时,会自动将操作记录到 `user_log` 表。
2、语句级触发器(FOR EACH STATEMENT)
sql
CREATE TRIGGER log_user_delete
AFTER DELETE ON users
FOR EACH STATEMENT
BEGIN
INSERT INTO user_log (user_id, action, timestamp)
VALUES (OLD.user_id, 'DELETE', NOW());
END;
删除 `users` 表时,会自动记录操作。
四、触发器的常见应用场景
1、数据校验:
sql
CREATE TRIGGER check_age
BEFORE INSERT ON users
FOR EACH ROW
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Age must be at least 18';
END IF;
2、自动更新关联表:
sql
CREATE TRIGGER update_related_table
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
INSERT INTO order_details (order_id, product_id, quantity)
VALUES (NEW.order_id, 1, 1);
END;
3、审计日志:
sql
CREATE TRIGGER audit_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (employee_id, old_salary, new_salary, change_time)
VALUES (NEW.employee_id, OLD.salary, NEW.salary, NOW());
END;