触发器

触发器

1、为什么要使用触发器

触发器含义:当表的某个特定事件发生前或发生后执行一些操作。如:

  • 增加一条学生记录时,检查年龄是否符合范围要求
  • 当删除一条学生信息时,自动删除其成绩表上对应的记录
  • 每当删除一条数据时,在数据库存档表中保留一个备份副本

作用:主要用于保护表中的数据。特别是当有多个 表具有一定的相互联系的时候,触发器能够让不同的表保持数据的一致性。

在MySql中只有执行insert、update和delete操作才能激活触发器。

(1) INSERT触发器:在INSERT语句执行前或之后执行得触发器。注意以下几点

  • 在INSERT触发器代码内,可引用一个名为NEW(不区分大小写)的虚拟表来访问被插入的行
  • 在BEFORE INSERT触发器中,NEW中得到值也可以被更新,允许更改被插入的值(要有相对应的操作权限)
  • 对于AUTO_INCREAMENT列,NEW在INSERT执行之前包含的值为0,在INSERT执行之后将包含新的自动生成值

(2) UPDATE触发器:在UPDATE语句执行前或之后执行得触发器。注意以下几点

  • 在UPDATE触发器代码内,可引用一个名为NEW(不区分大小写)的虚拟表来访问更新的新值
  • 在UPDATE触发器代码内,可引用一个名为OLD(不区分大小写)的虚拟表来访问UPDATE执行前的值
  • 在BEFORE UPDATE触发器中,NEW中得到值也可以被更新,即允许修改将要用于UPDATE语句中的值(要有相对应的操作权限)
  • OLD中的值全部是只读的,不能被更新

注意:当触发器设计对触发表自身的更新操作时,只能使用BEFORE类型的触发器,AFTER类型的触发器将不被允许。

(3) DELETE触发器:在DELETE语句执行前或之后执行得触发器。注意以下几点

  • 在DELETE触发器代码内,可引用一个名为OLD(不区分大小写)的虚拟表来访问被删除的行
  • OLD中的值全部是只读的,不能被更新

触发器使用过程中,MySql会按照以下方式来处理错误:

  1. 对于事务性表,如果触发器程序失败,则会导致整个程序失败,那么该语句所有执行的更改将回滚;对于非事务性表,失败前所做的更改依然有效。
  2. 若BEFORE触发器失败,则MySQL将不执行相应行上的操作
  3. 若在BEFORE或AFTER出发程序的执行过程中出现错误,则将导致调用出发程序的整个语句失败。
  4. 仅当BEFORE触发器和行操作均已被成功执行,才会执行AFTER触发器。

2、创建触发器

2.1 基本语法

CREATE <触发器名>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值