mysql之触发器before和after的区别
mysql 区别 触发器 After before
2023-09-14 08:57:44 时间
我们先做个测试:
接上篇日志建的商品表g和订单表o和触发器
假设:假设商品表有商品1,数量是10;
我们往订单表插入一条记录:
insert into o(gid,much) values(1,20);
会发现商品1的数量变为-10了。这就是问题的所在,因为我们之前创建的触发器是after,也就是说触发的语句是在插入订单记录之后才执行的,这样我们就无法判断新插入订单的购买数量。
先讲一下after和before的区别:
after是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作;也就是说先插入订单记录,再更新商品的数量;
before是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作;
我们用一个典型案例来区分它们的区别,新建一个触发器:
#监视地点: 商品表o
#监视事件:insert
#触发时间:before
#触发事件:update
案例:当新增一条订单记录时,判断订单的商品数量,如果数量大于10,就默认改为10
create trigger tg6
before insert on o
for each row
begin
if new.much > 10 then
set new.much = 10;
end if;
update g set num = num - new.much where id = new.gid;
end$
执行完,把之前创建的after触发器删掉,再来插入一条订单记录:
insert into o(gid,much) valus(1,20)$
执行完会发现订单记录的数量变为10,商品1的数量变为0了,就不会出现负数了。
显示触发器:show triggers;
相关文章
- 浅谈MySQL和MariaDB区别(mariadb和mysql的性能比较)
- MySQL导入数据库的简易操作方法(mysql如何导入数据库)
- 测试MySQL触发器构建:PHP测试实例(mysql触发器php)
- MySQL vs Oracle: 对比两种数据库系统(mysql与oracle区别)
- MySQL共享锁与排他锁区别分析(mysql共享锁排他锁)
- ?MySQL中字节与字符的区别(mysql字节字符)
- 优化MySQL数据库,让它更快更好(mysql数据库的优化)
- MySQL时间触发器:自动化精细管理(mysql时间触发器)
- MySQL时间触发器实现自动化任务(mysql时间触发器)
- MySQL中实现字符串的累加(mysql字符串累加)
- MySQL中处理二进制数据的方式(mysql二进制数据)
- MySQL处理二进制数据的实战指南(mysql二进制数据)
- MySQL 时间触发器:按照时间定时执行任务(mysql时间触发器)
- 使用EA连接MySQL数据库(ea连接mysql)
- SQL Server和MySQL:功能对比(sqlserver和mysql区别)
- 比较MySQL和Oracle:哪一个更可靠?(mysql和oracle区别)
- 数据库中的MySQL 理解Mysql数据库的重要性(MySql中mysql)
- 如何在MySQL中处理不同的时区问题(mysql不同时区)
- MySQL的XA协议实现及其在分布式系统中的应用(mysql xa 分布式)
- MySQL的两种表InnoDB和MyISAM区别详解(mysql两类表)
- MySQL 应用下载快捷高效可靠的数据库解决方案(mysql下载app)
- Mysql 数据库丢失别慌来了解一下 MySQL 不见的可能原因及解决办法(mysql不见)
- MySQL连接错误,无法到达数据库(mysql不能到达)
- MySQL中不等于的使用和区别(mysql不等于和区别)
- MySQL轻松切换数据库,无需使用USE命令(mysql不用use)