mysql开发 -- 触发器

MYSQL 从5.0.2版本开始支持触发器的功能,触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。

触发器的创建

触发器创建语法如下:

 CREATE TRIGGER trigger_name trigger_time trigger_event
 ON table_name FOR EACH ROW
 BEGIN
 trigger_statement
 END

其中:
trigger_name 是触发器的名称。

trigger_time 是触发器的触发时间,可以是BEFORE 或是AFTER,BEFORE的含义值在检查约束前触发,AFTER 是在检查约束后触发。

trigger_envent 是触发器的触发事件。 可以是 INSERT,UPDATE ,DELETE.

对于同一个表的相同触时间的相同触发事件,只能定义一个触发器

使用别名 NEW 和OLD 来应用触发器中发送变化的记录内容。现在的触发器还只支持行级触发,不支持语句级触发。

为 film 表创建 after insert 触发器:

DELIMITER &&
CREATE TRIGGER ins_flim after insert
ON film FOR EACH ROW
BEGIN 
    INSERT INTO file_text(film_id , title, description) values(NEW.film_id,NEW.title,NEW.description);
END;
$$
DELIMITER;

触发器的删除:

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

DROP TRIGGER [schema_name.]trigger_name;

例如要删除film表上的触发器:

drop trigger ins_flim;

触发器的查看:

可以通过

SHOW TRIGGERS

来查看触发器的状态,语法等信息。但是因为不能查询指定的触发器,所以每次都返回所有的触发器信息。
另一个查询方法是查看系统表的information_schema.triggers表,这个方式可以查询指定触发器的指定信息,操作起来方便:

    select * from triggers where trigger_name = 'ins_flim' \G;

触发器的使用:

触发器执行的语句有以下两种限制。

  • 触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL,但是允许存储程序通过参数将数据返回触发程序。也就是存储过程或是函数通过OUT或是INOUT类型的参数,将数据返回触发器是可以的,但是不能调用直接返回数据的过程。
  • 不能再触发器中使用以显示或是隐式方式开始或结束事务的语句。

MYSQL的触发器是按照 EEFORE触发器,行操作,AFTER触发器的顺序执行的。其中任何一部分操作发生错误,都不会继续执行剩下的操作。如果是对事务表进行的操作,那么会整个作为一个事务被回滚,如果是对非事务表进行的操作,已经更新的记录将无法回滚,这也是设计触发器的时候需要注意的问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值