MySQL触发器
一、创建触发器
触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。可以协助应用在数据库端确保数据的完整性。
表中的某些数据改变,同时引起其他相关数据改变时,使用触发器,是一类特殊的事务,可以监视某种数据操作(insert、update、delete),并触发相关操作(insert、update、delete);sql 1 触发 sql n
触发器只能创建在永久表上,不能对临时表创建触发器。
触发器不仅可以简化程序,还可以增加程序的灵活性。
语法四要点:
监视地点(table)
监视事件(insert、update、delete)
触发时间(after、before)
触发事件(insert、update、delete)
CREATE TRIGGER trigger_name
trigger_time
trigger_event
ON tbl_name
For Each Row
trigger_stmt
说明:触发器只能创建在永久表上
Trigger_time 触发器的触发时间 before(检查约束前) 或 after
Trigger_event 触发事件 insert、update 或 delete
Trigger_stmt begin。。。end
使用别名old和new来引用触发器中发生变化的记录内容;
对于同一表的相同触发时间的相同触发事件,只能定义一个触发器
问题:如何让 update 中的 goods_number、goods_id 根据 insert 的数据实时变化?
通过 new 关键字,同理监听删除 用关键字 old
Insert 无中生有为 new
Delete 从有到无为 old
Update 由 旧 变为 新 旧数据用 ord,新数据 new
函数加变量定义以及 before 和 after 的区别:
For each row 的含义:
二、删除触发器
一次可以删除一个触发程序;
DROP TRIGGER trigger_name;
查看触发器
SHOW TRIGGERS;
Information.Triggers表
Select * from triggers where trigger_name =”name”;
三、触发器的使用
不能再触发器中使用以显示或隐式方式开启或结束事务语句;
不能调用将数据返回客户端的存储程序,也不能使用采用call语句的动态sql语句