问题引入
有一个库存管理系统,完成下单之后,应该减少库存
insert into g(gid, num) values(2,3) //插入语句
update g set goods_num=goods_num-3 where id=2 //更新过程
这两个逻辑可以看成一个整体或者 insert
—— 引来 update
用触发器可以解决上述问题
我们可以监视某表的变化,当发生某种变化时,触发某个操作
触发器
触发器:
能监视
:增删改
触发
操作:增删改
四个要素:
监视地点 table
监视事件 insert/update/delete
触发时间 before/after
触发事件 insert/update/delete
创建触发器
delimiter //
create trigger triggerName
after/before insert/update/delete on 表名
for each row #这句话是固定的
begin
sql语句 # 一句或多句 insert/update/delete范围内
end//
delimiter ;
如何在触发器引用行的值:
对于insert
而言,新增的行,用new
来表示
行中的每一列的值,用new.
列名表示
对于delete
来说,原本有一行,后来被删除
想引用被删除的这一行,用old
来表示
行中的每一列,用old.
来表示
对于update
来说
被修改的行
修改前的数据,用old
来表示,列名引用被修改之前行中的值
修改后的数据,用new
来表示,列名引用被修改之后行中的值
删除触发器
drop trigger 触发器名;
查看触发器
show triggers;