目录
1. 概念
触发器是一段程序,可以理解为一种特殊的存储过程,听这个名字就知道,当某个条件发生时,就会触发这个触发器执行,就像地雷一样,事先定义好触发条件,触发器的执行语句,然后一旦该条件发生,触发器就执行。
2. 创建触发器
CREATE TRIGGER 触发器名 触发时机 触发事件 ON 表名 FOR EACH ROW 一条执行语句;
触发时机:BEFORE 或者 AFTER。
触发事件:INSERT、UPDATE、DELETE。
触发器是建立在一张表上的,只针对这张表的触发。
触发执行多条语句:
CREATE TRIGGER 触发器名 触发时机 触发事件 ON 表名 FOR EACH ROW BEGIN 多条执行语句 END;
NEW 和 OLD 关键字:在 INSERT 型触发器中,NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据; 在 UPDATE 型触发器中,OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据; 在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据。对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在和NEW以及OLD同时使用。FOR EACH ROW子句通知触发器每隔一行执行一次动作。
举个例子:
CREATE TABLE student(
id INT PRIMARY KEY,
`name` VARCHAR(20),
age SMALLINT
);
SET @sum = 0;
CREATE TRIGGER trigger_student_i BEFORE INSERT ON student
FOR EACH ROW SET @sum = @sum + NEW.age;
SHOW TRIGGERS;
INSERT INTO student VALUES(1, 'Bob', 24), (2, 'Alice', 23);
SELECT @sum;
DROP TRIGGER trigger_student_i;
3. 查看触发器
SHOW TRIGGERS; 查看所有的触发器。
在triggers表中查看触发器信息:SELECT * FROM INFORMATION_SCHEMA, TRIGGERS WHERE 查询条件;
查询条件主要是利用触发器名去查询,比如 TRIGGER_NAME='触发器名',用LIKE去模糊匹配。
4. 删除触发器
DROP TRIGGER [数据库名.] 触发器名;
如果不指定数据库名,默认是删除当前数据库的触发器。
总结:
对于相同的表,相同事件的触发器不能重复创建,比如student表已经有一个 AFTER UPDATE 触发器了,名为hehe,你就不能再去创建一个AFTER UPDATE触发器,即使触发器名不一样也不行。
及时删除不再需要的触发器,如果不及时删除的话,只要触发条件达到了,它总会执行。