创建触发器的语法 CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt trigger_name:触发器名称 tirgger_time:触发执行事件 BEFORE:事件之前触发 AFTER:事件之后触发 trigger_event:触发事件 INSERT:插入某一行时激活触发器,INSERT,LOAD DATA,REPLACE语句可以触发 UPDATE:更改某一行时激活触发器,UPDATE语句可以触发 DELETE:删除某一行时激活触发器,DELETE,REPLACE语句可以触发 tb_name:触发器要执行的哪张表 FOR EACH ROW:触发频率为每一行触发一次 trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句 1、创建只有一个执行语句的触发器 CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 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; 3、NEW和OLD MySQL中定义了NEW和OLD,用来记录发生变化的内容,具体为: INSERT:NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据; UPDATE:OLD用来表示将要或已经被修改的原数据,NEW用来表示将要或已经修改为的新数据; DELETE:OLD用来表示将要或已经被删除的原数据; 使用方法: NEW.columnName (columnName 为相应数据表某一列名)
delimiter // create trigger user_log after insert on users for each row begin insert into logs(log) values(new.name); end // delimiter ; 使用触发器 触发器无法由用户直接调用,而知由于对表的【增/删/改】操作被动引发的。
insert into users(name) values('admin'); 查看触发器 SHOW TRIGGERS语句查看触发器信息