触发器
触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,会激活促发其执行相应的操作。
引用场景:转账的时候一方扣钱了,那么另一方自动加钱
一、创建触发器
语法如下:
#修改命令结束标识符 delimiter
delimiter $
create trigger tri_test1
after insert on 表名
for each row
begin
update 表名 set num=num-new.字段名 where 字段名 =new.字段名;
end$
delimiter ;
触发器创建语法的四要素:
要素 | 作用 |
---|---|
监视地点(table) | 基于表 ,表示对那张表进行监控 |
监视事件(insert/update/delete) | 用来监视要执行的语句 |
触发时间(after/before) | 在执行命令之后/之前执行预设好的命令 |
触发事件(insert/update/delete) | 预设的让MySQL执行的命令语句,可以使用多句sql捆绑在一起,多句sql之间用分号隔开 |
二、触发器的使用
1. insert语句,只有new是合法的。
示例:给order表添加订单,更新商品库存
mysql> create trigger tri_1
-> after insert on `order`
-> for each row
-> begin
-> update commodity set c_num = c_num - new.o_num where c_id = new.o_cid;
-> end$
2. delete语句,只有old是合法的。
示例:给order表删除订单,更新商品库存
mysql> create trigger tri_2
-> after delete on `order`
-> for each row
-> begin
-> update commodity set c_num = c_num +old.o_num where c_id = old.o_cid;
-> end$
3. update语句,new和old可以同时使用
示例:给order表更新订单,更新商品库存
mysql> create trigger tri_3
-> after update on `order`
-> for each row
-> begin
-> update commodity set c_num = c_num +old.o_num-new.o_num where c_id = old.o_cid;
-> end$
三、查看触发器
1.使用show triggers\G 查看所有触发器
2.在数据库information_schema中通过查看触发器表,来查看触发器:使用select * from triggers\G;【当然可以以触发器名作为where条件查找数据】
3.查看触发器创建语句:show create trigger 触发器名\G;
mysql中,触发器只能查看,无法修改, 如果要修改,只能删除原有的触发器,重新创建触发器,以达到修改的目的。
使用drop trigger 触发器名;
来删除触发器