1.创建触发器
触发器只能在永久表上,不能对临时表创建触发器
在同一个表相同的触发时间的相同触发事件,只能定义一个触发器
现在触发器还只支持行级触发,不支持语句级触发
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_Stmt
trigger_time:触发器的触发时间 AFTER(在检查约束后触发) BEFORE(在检查约束前触发)
trigger_event:触发事件,可以是INSERT UPDATE BEFORE
trigger_Stmt:触发执行的语句
使用别名old new来引用触发器中发生变化的记录内容
1.1INSERT INTO ..ON DUPLICATE KEY UPDATE…
并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE
有BEFORE INSERT 、BEFORE UPDATE、AFTER UPDATE、AFTER INSERT 四个触发器
当插入重复的时候如有update的触发器则会触发,顺序依次是 BEFORE INSERT 、BEFORE UPDATE、AFTER UPDATE。
到没重复的时候,顺序是 BEFORE INSERT、AFTER INSERT
2.删除触发器、
一次可以删除一个触发程序,如果没有指定 schema_name 则默认为当前数据库
DROP TRIGGER [schema_name.]trigger_name
3.查看触发器
1.1 show triggers
1.2查看系统表
DESC TRIGGERS
4.触发器的使用
触发程序不能调用将数据返回客户端的存储程序,也不能使用采用call语句的动态SQL语句(执行操作过程和函数),也就是说,触发程序不能调用返回为结果集的数据,只能是实实在在的数据
不能再触发器中使用以显式或隐式方式开始或结束事务的语句。如atart commit rollback