sql
CREATE TRIGGER trigger_name
trigger_time trigger_event
ON table_name FOR EACH ROW
trigger_body
参数说明:
trigger_name:触发器的名称,必须唯一
trigger_time:触发时机,BEFORE 或 AFTER
trigger_event:触发事件,INSERT、UPDATE 或 DELETE
table_name:关联的表名
trigger_body:触发器执行的SQL语句(使用BEGIN...END包含多条语句)
触发器示例
1、BEFORE INSERT 触发器
sql
CREATE TRIGGER before_employee_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
IF NEW.salary < 0 THEN
SET NEW.salary = 0;
END IF;
END;
2、AFTER UPDATE 触发器
sql
CREATE TRIGGER after_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employee_audit
SET action = 'update',
employee_id = OLD.id,
changed_at = NOW();
END;
3、多语句触发器(使用DELIMITER)
sql
DELIMITER //
CREATE TRIGGER before_product_delete
BEFORE DELETE ON products
FOR EACH ROW
BEGIN
INSERT INTO product_archive
SELECT * FROM products WHERE id = OLD.id;
INSERT INTO deletion_log
SET product_id = OLD.id,
deleted_at = NOW();
END//
DELIMITER ;
查看触发器
sql
SHOW TRIGGERS;
或
SHOW TRIGGERS FROM database_name;
或
SELECT * FROM information_schema.triggers;