读书笔记_mysql必知必会_25_使用触发器

目录

创建触发器

删除触发器

使用触发器

INSERT触发器

DELETE触发器

UPDATE触发器

关于触发器的进一步介绍


如果你想要某条语句(或某些语句)在事件发生时自动执行
 
每当增加一个顾客到某个数据库表时,都检查其电话号码格式是否正确,州的缩写是否为大写;
每当订购一个产品时,都从库存数量中减去订购的数量;
无论何时删除一行,都在某个存档表中保留一个副本。
 
的共同之处是它们都需要在某个表发生更改时自动处理。
 
触发器 MySQL 响应以下任意语句而自动执行的一条MySQL 语句(或位于 BEGIN END 语句之间的一组语
句):
           DELETE
           INSERT
           UPDATE
其他MySQL语句不支持触发器
 

创建触发器

唯一的 触发器名
触发器 关联的表
触发器应该 响应的活动 DELETE INSERT UPDATE
触发器 何时执行 (处理之前或之后)
 
 
创建触发器
 
 
触发器只支持表, 不支持视图
 
触发器按每个表每个事件每次地定义, 每个表每个事件每次只允许一个触发器 。因此,每个表 最多支持6个触发器 (每条 INSERT UPDATE和DELETE 的之前和之后)
 
单一触发器不能与多个事件或多个表关联 ,所以,如果你需要一个对INSERT UPDATE 操作执行的触发器,则应该定义
两个触发器。
 
 

删除触发器

 

使用触发器

INSERT触发器

INSERT触发器在INSERT语句执行之前或之后执行

INSERT 触发器代码内,可引用一个 名为NEW的虚拟表 ,访问被插入的行;
BEFORE INSERT 触发器中, NEW中的值也可以被更新 (允许更改被插入的值);
对于 AUTO_INCREMENT列 NEW INSERT 执行之前包含 0 ,在 INSERT执行之后包含新的自动生成值。
 

测试INSERT触发器

DELETE触发器

DELETE触发器在DELETE语句执行之前或之后执行

DELETE 触发器代码内,你可以引用一个名为 OLD 的虚拟表,访问被删除的行;
OLD 中的值全都是只读的,不能更新。
 
演示使用 OLD 保存将要被删除的行到一个存档表中
 
 
使用 BEFORE DELETE触发器的优点 (相对于 AFTER DELETE 触发器来说)为,如果由于某种原因,订单不能存档,DELETE 本身将被放弃
 
 

UPDATE触发器

UPDATE触发器在UPDATE语句执行之前或之后执行

 在UPDATE触发器代码中,你可以引用一个名为OLD的虚拟表访问以前(UPDATE语句前)的值,引用一个名为NEW的虚拟表访问新更新的值;

 在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值);

OLD 中的值全都是只读的,不能更新。
 
例子保证州名缩写总是大写(不管 UPDATE 语句中给出的是大写还是小写)
 
 

关于触发器的进一步介绍

与其他 DBMS 相比, MySQL 5中支持的触发器相当初级 。未来的
MySQL 版本中有一些改进和增强触发器支持的计划。
 
创建触发器可能需要特殊的安全访问权限 ,但是,触发器的执行是自动的。如果INSERT UPDATE DELETE 语句能够执行,则相关的触发器也能执行。
 
应该 用触发器来保证数据的一致性(大小写、格式等) 。在触发器中执行这种类型的处理的优点是它总是进行这种处理,而且是透明地进行,与客户机应用无关
 
触发器的一种非常有意义的使用是 创建审计跟踪 。使用触发器把 更改(如果需要,甚至还有之前和之后的状态)记录到另一个
表非常容易
遗憾的是, MySQL 触发器中不支持 CALL 语句。这表示 不能从触发器内调用存储过程 。所需的存储过程代码需要复制到触发器内。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值