MySQL的触发器和存储过程(https://blog.csdn.net/weixin_44951273/article/details/100765929)一样都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE和DELETE语句。
触发器(trigger)是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要CALL来调用,也不需要手工启动,只要当一个预定义的事件发生时,就会被MySQL自动调用。
创建触发器语法格式:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name FOR EACH ROW trigger_stmt;
其中trigger_name标识触发器的名称;trigger_time标识触发时机,可指定为BEFORE或AFTER;trigger_event标识触发事件,包括INSERT、UPDATE和DELETE;table_name标识建立触发器的表名,即在哪张表上建立触发器;trigger_stmt是触发器程序体,触发器程序可以使用BEGINE和END作为开始和结束,中间包含多条语句。
例:
#创建一个触发器,当向userinfo表插入一条数据时,向usercount表中的count字段进行加1操作
DELIMITER $
CREATE TRIGGER user_count AFTER INSERT ON userinfo FOR EACH ROW
BEGIN
UPDATE usercount SET count = count + 1
WHERE id = 1;
END $
查看触发器:
SHOW TRIGGERS\G;
在triggers表中查看触发器信息:
在MySQL中所有触发器的定义都存在INFORMATION_SCHEMA数据库的TRIGGERS表格中,可以通过查询命令SELECT来查看,语法如下:
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME="触发器名称"\G; # 查看具体某个触发器
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS # 查看所有触发器
删除触发器:
DROP TRIGGER [database_name]trigger_name;
database_name表示数据库名称,可选,如果省略的话将从当前数据库删除触发器,trigger_name表示要删除的触发器名称。
在使用触发器的时候应该注意,对于相同的表,相同的事件只能创建一个触发器,对于不在使用的触发器要及时删除。