MySQL的触发器

1. MySQL从5.0.2版本开始支持触发器的功能。

2. 创建触发器

CREATE  TRIGGER  trigger_name  trigger_time  trigger_event

ON tbl_name FOR EACH ROW trigger_stmt;

 

a.  trigger_time: 触发时间  (BEFORE:检查约束前触发 ,  AFTER检查约束后触发  )

b.  trigger_event: 触发时间 (INSERT, UPDATE , DELETE)

c. 注意:对同一个表相同触发时间的相同触发事件,只能定义一个触发器。

d. 使用别名 OLD和NEW 来引用触发器中发生变化的记录内容。

 

示例:

DELIMITER $$

CREATE  TRIGGER   ins_film

AFTER INSERT  ON  film 

FOR  EACH  ROW 

BEGIN

INSERT INTO film_test(film_id, title, description)

VALUES(new.film_id,new.tiltle, new.description);

END ;

$$

delimiter ;

 

3. 删除触发器

一次可以删除一个触发程序,如果没有指定schema_name ,默认为当前数据库。

DROP TRIGGER   [schema_name.]trigger_name

 

4. 查看触发器

a.    SHOW   TRIGGERS  \G

b.    查看指定触发器信息

select   *

from  information_schema.triggers

where  trigger_name='ins_film_bef' \G 

 

5. 触发器执行限制

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

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

注意:

MySQL的触发器是按照BEFORE 触发器,行操作,AFTER触发器的顺序执行,其中任何一步操作发生错误都不会继续执行剩下的操作。

如果是对事务表进行的操作,那么会整个作为一个事务被回滚(ROLLBACK)

但是对非事务表进行操作,那么已经更新的记录将无法回滚

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值