触发器

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。(触发器只能创建在永久表上,不能对临时表创建触发器)。

       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:标识触发事件,取值为 INSERTUPDATE DELETE

tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;

trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN END 包含的多条语句。

 

由此可见,可以建立6种触发器,即:BEFORE INSERTBEFORE UPDATEBEFORE DELETEAFTER INSERTAFTER UPDATEAFTER

 

删除触发器:

一次可以删除一个触发程序,如果没有制定的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触发器的顺序执行的,其中任何一步操作发生错误都不会继续执行剩下的操作。

posted on 2015-01-21 10:05  我是齐欢  阅读(429)  评论(0编辑  收藏  举报