数据库编程中触发器的使用

触发器是一种自定义的高级约束,触发体和触发条件具有原子性,要么全部被执行,要么全部不执行。

触发器定义的一般格式

CREATE TRIGGER  <触发器名> < BEFORE | AFTER >
 <INSERT | UPDATE | DELETE>
 ON <表名> FOR EACH ROW<触发器主体>

触发器名:建议命名格式为:Tri+表名+<INSERT | UPDATE | DELETE>
BEFORE | AFTER : 二选一,代表事前触发器(事后触发器)
<INSERT | UPDATE | DELETE>,代表触发器的条件
FOR EACH ROW:代表行级触发器,目前mysql不支持语句级触发器
触发器主体:一组完成指定任务的SQL代码;

事前和事后触发器

事前触发主要是验证一些条件或进行一些准备工作,在表保存之前就触发,如写入工资前,判断工资是否低于最低标准,如果低于最低标准,将更新数据改为最低标准。而事后触发则是进行收尾工作,保证事务的完整性,在表经过修改以后才触发,如:插入用户信息后,需要根据用户所在岗位,将该岗位必修课,设置为该用户的必修课。

触发器中的临时表

触发器中可以使用new和old两个临时表,这两个临时表和建立触发器的表结构完全一样,new记录着新值、old记录旧值。insert时new中为要新插入的记录,old为空;delete时,new为空,old记录旧记录;update时new和old分别记录新纪录和旧记录。

行级触发器和语句级触发器

行级触发器是对DML语句影响的每个行执行一次,如UPDATE语句影响多行,就会对每行都激活一次触发器;如:将计算机学院答辩通过的学生,状态更改为毕业,涉及200名学生,则该触发体需要执行200次。

而语句级触发器是对每个DML语句执行一次,如INSERT语句在表中即使插入了100多行,表上的INSERT语句级触发器也只会执行一次,如:
insert into TStudentCourse(sno,cname)
select sno,‘数据结构’ from student
虽然涉及多名学生但触发体只执行一次。

触发器注意事项

mysql触发器中可以调用存储过程,但不允许存储过程对触发器所在的表进行同样的操作,嵌套触发触发器操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值