创建触发器
1)、只有一个执行语句的触发器
语法:
CREATE TRIGGER 触发器名 BEFORE | AFTER 触发器事件
ON 表名 FOR EACH ROW 执行语句
-
BEFORE:指在触发事件之前执行触发语句
-
AFTER:在触发事件之后执行触发语句
-
触发事件:只触发的条件,其中包括INSERT、UPDATE、DELETE;
-
FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器
-
执行语句:指触发器触发后执行的程序
2)、创建有多个执行语句的触发器
语法:
CREATE TRIGGER 触发器名 BEFORE | AFTER 触发器事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END
不同的执行语句间用分号隔开
一般情况下,MySQL 默认是以
;
作为结束执行语句。在创建触发器时过程中需要用到;
。为了解决这个问题,可以用DELIMITER语句。如DELIMITER && ;
来将结束符号变成;
DELIMITER && CREATE TRIGGER 触发器名 BEFORE | AFTER 触发器事件 ON 表名 FOR EACH ROW BEGIN 执行语句列表 END DELIMITER ;
MySQL中,一个表在相同触发时间的相同触发事件,只能创建一个触发器。
查看触发器
1)、SHOW TRIGGERS 查看触发器信息
语法:SHOW TRIGGERS;
该语句只能查询所有触发器信息。
2)、在tiggers表中查看触发器信息
所有的触发器的定义都存在information_schema
数据库下的 triggers 表中。
SELECT * FROM information_schema.tiggers WHERE TIGGER_NAME='触发器名';
触发器的使用
在激活触发器时,对触发器中的执行语句存在一些限制:
不能包含 START TRANSACTION、COMMIT、或ROLLBACK等关键词,也不能包含CALL语句。
在触发器的执行过程中,任何步骤出错都会阻止程序向下执行。但是对于普通表来说,已经更新过的记录是不能回滚的。更新后的数据将继续保持在表中。
删除触发器
语法:DROP TRIGGER 触发器名;
触发器需要及时删除