触发器
触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。(触发器只能创建在永久表上,不能对临时表创建触发器)。
After:检查约束后触发;before:检查约束前触发
对同一个表相同出发时间的相同触发事件,只能定义一个触发器。eg:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW
trigger_stmt
create trigger 触发器名称
after/before insert/update/delete on 表名
for each row
begin
sql 语句—一个或者多个语句范围在 insert/update/delete内;
end
其中:
trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语句。
由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER
删除触发器:
一次可以删除一个触发程序,如果没有制定的schema_name,则默认为当前数据库,语法:
drop trigger [schema_name.]trigger_name
查看触发器
show tiggers; //查询所有触发器
information_schema.tiggers //可以查询指定触发器的指定信息
触发器的使用
限制:
(1)、触发程序不能调用将数据返回客户端的存储程序,也不能使用采用call语句的动态SQL语句,但是允许存储程序通过参数将数据返回触发程序。也就是存储过程或者函数通过OUT或者INOUT类型的参数将数据返回触发器是可以的,但是不能直接返回数据的过程。
(2)、不能再触发器中使用以显示或隐式方式开始或结束事务的语句,如START TRANSACTION、COMMIT或ROLLBACK.
MySQL的触发器是按照before触发器、行操作、after触发器的顺序执行的,其中任何一步操作发生错误都不会继续执行剩下的操作。