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

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号