MySQL触发器
触发器
1、概述
-
触发器:是一个特殊的存储过程 它是MySQL在insert update delete 的时候自动执行 不能手动调用
-
四个要素
- 监视地点 table
- 监视时间 (insert/update/delete)
- 触发时间(after/before)
- 触发时间 (insert/update/delete)
-
主体结构
create trigger trigger_name after/before insert/update/delete on table_name for each row begin sql语句(触发的语句可以是一条也可以是多条) end;
2、创建表
-
goods 商品表
create table goods( goods_id int unsigned primary key auto_increment, goods_name varchar(20), goods_num int unsigned )
-
order 订单表
create table `order`( order_id int unsigned primary key auto_increment, goods_id int unsigned, order_num tinyint )
-
添加商品数据
insert into goods values(null,'iPhone13', 100),(null,'watch',20),(null,'平板', 30);
3、下订单商品对应减少
-
分析
监视地点 order表
监视事件 insert
触发时间 insert之后
触发事件 update操作
-
实例
create trigger t1 after insert on `order` for each row begin update goods set goods_num=goods_num-new.order_num where goods_id=new.goods_id; end;
-
new的含义
new代表新增的一条数据 行中每一列的值使用new.列名来代替
-
插入语句
insert into `order` values(null, 1, 5);
4、撤销订单
-
分析
监视地点 order表
监视事件 delete
触发时间 delete之后
触发事件 update操作
-
实例
drop trigger if exists t1; create trigger t2 after delete on `order` for each row begin update goods set goods_num=goods_num+old.order_num where goods_id=old.goods_id; end;
删除触发器:drop trigger if exists t1;
-
删除刚才所下的订单
delete from `order` where order_id=1;
5、修改订单
-
步骤
- 撤销订单
- 新增订单
-
实例
drop trigger if exists t2; create trigger t3 after update on `order` for each row begin --撤销订单 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 order_num=10 where order_id=2;
-
商品表执行了两次动作
- 先将商品的数量和订单的数量累加在一起
- 减掉订单的数量 则为当前商品的剩余数量
本文来自博客园,作者:寻月隐君,转载请注明原文链接:https://www.cnblogs.com/QiaoPengjun/p/16013062.html