觸發器
觸發器(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 觸發器名;
來刪除觸發器