MySQL之如何使用触发器

2025-05-01 03:07:02

触发器:它是一个特殊的存储过程,它是MySQL在insert、update、delete的时候执行,自动执行,不能直接调用。它包含四个要素:1. 监视地点(table)2. 监视事件(insert/update/delete)3. 触发时间(after/before)4. 触发事件(insert/update/delete)

触发器

1、语法:create trigger trigger_nameafter/before insert/update/delete on tb_namefor each rowbeginsql 语句:(触发的语句一句或者多句)end;

2、现有两张表 商品表 goods 和订单表 order 来说明触发器的工作原理;

MySQL之如何使用触发器
MySQL之如何使用触发器

3、我们现在往goods表添加四条记录:insert into goods (goods_name,goods_num)values("手机",20),("电脑",30),("单反",20);

4、1. 实现购买任意商品,对应的商品数量相应的减少:分析:监视地点:order 表监视事件:insert操作触发时间:在insert操作之后触发事件:update操作CREATE TRIGGER t1AFTER INSERT ON `order`FOR EACH ROWBEGINUPDATE goods SET goods_num=goods_num-new.order_num WHERE goods_id=new.goods_id;END;

5、如 我们购买5个手机:INSERT INTO `order` (goods_id,order_num) VALUES(1,5);注:对于insert 而言 新增的行使用new 来表示,行中的每一列的值用 new.列名来表示这时我们会发现goods表、order表的数据如下:

MySQL之如何使用触发器
MySQL之如何使用触发器

6、2.撤镓恰鲜仍销订单:分析:监视地点:order 表监视事件:delete操作触发时间:在delete操作之后触发事件:update操作DROP TRIGGER if E淌捌釜集XISTS t1;CREATE TRIGGER t1AFTER DELETE ON `order`FOR EACH ROWBEGINUPDATE goods SET goods_num=goods_num+old.order_num WHERE goods_id=old.goods_id;END;

7、现在要取消刚才买的5个手机的订单:DELETE FROM `order` WHERE order_id=1;注:对于delete而言 删除的行使用old 来表示, 行中的每一列的值用 old.列名来表示这时我们会发现goods表、order表的数据发生了如下的变化:

MySQL之如何使用触发器
MySQL之如何使用触发器

8、修改订单(包括修改购买的数量以及购买的商品)分两步:1. 撤销订单;(delete);2. 新增订单:(insert);DROP TRIGGER if EXISTS t1;CREAT呶蓟鹭毵E TRIGGER t1AFTER UPDATE ON `order`FOR EACH ROWBEGIN-- 撤销订单UPDATE goods SET goods_num=goods_num+old.order_num WHERE goods_id=old.goods_id;-- 新增订单UPDATE goods SET goods_num=goods_num-new.order_num WHERE goods_id=new.goods_id;END;UPDATE `order` SET goods_id=2,order_num=4 WHERE order_id=2;现在看下两张表的变化:

MySQL之如何使用触发器
MySQL之如何使用触发器
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢