mysql触发器

创建触发器的语法如下:

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、DELETE或者UPDATE
tb_name:表示建立触发器的表明,就是在哪张表上建立触发器
trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句
所以可以说MySQL创建以下六种触发器:
BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE
AFTER INSERT,AFTER DELETE,AFTER UPDATE

一张表最多可建6个触发器tirgger_time和trigger_event共有6种组合。

一般情况下,mysql默认是以 ; 作为结束执行语句,与触发器中需要的分行起冲.为解决此问题可用DELIMITER

DELIMITER &

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件

ON 表名 FOR EACH ROW

BEGIN

    执行语句列表;

    执行语句列表;

END

&

触发器中的old各new  old:表示将要或者已删除的数据;new:表示将要或者已增加的数据

查看已有触发器SHOW TRIGGERS语句查看触发器信息

drop trigger  user_log;#删除触发器

 

触发器会有以下两种限制:

1.触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL语句,但是允许存储程序通过参数将数据返回触发程序,也就是存储过程或者函数通过OUT或者INOUT类型的参数将数据返回触发器是可以的,但是不能调用直接返回数据的过程。

2.不能再触发器中使用以显示或隐式方式开始或结束事务的语句,如START TRANS-ACTION,COMMIT或ROLLBACK。

注意事项:MySQL的触发器是按照BEFORE触发器、行操作、AFTER触发器的顺序执行的,其中任何一步发生错误都不会继续执行剩下的操作,如果对事务表进行的操作,如果出现错误,那么将会被回滚,如果是对非事务表进行操作,那么就无法回滚了,数据可能会出错。

我们建立的数据库一般都是 InnoDB 数据库,其上建立的表是事务性表,也就是事务安全的。这时,若SQL语句或触发器执行失败,MySQL 会回滚事务.

posted @ 2018-10-23 16:50  十九。。  阅读(106)  评论(0编辑  收藏  举报