( 17 )MySQL中的觸發器
MySQL中的觸發器
觸發器
需求:有兩張表,一張定單表,一張商品表.每生成一個訂單,商品庫存就相應減少.
觸發器 ( trigger )
事先為某張表綁定好一段代碼,當某些內容發生改變的時候(增刪該),系統會自動觸發代碼的執行.
觸發器包括 : 事件類型,觸發時間,觸發對象
事件類型: 增刪改,三種類型 insert ,delete和update.
觸發時間: 觸發前後 before 和 after
觸發對象:表中的每一條記錄(行)
一張表中只能有一種觸發時間的一種類型的觸發器 : 一張表最多有6個觸發器.
創建觸發器
------------------------------------------------------------
-- 臨時修改語句結束符
delimiter 自定義符號
create trigger 觸發器名字 觸發時間 事件類型 on 表名 for each row
begin -- 代表左大括號:開始
-- 裏面是觸發器的內容
end --代表右大括號:結束
-- 將臨時修改的語句結束符修改為分號
delimiter ;
------------------------------------------------------------
創建表並插入數據
-- 創建觸發器 生成一個訂單,商品庫存減少
delimiter $
create trigger after_order after insert on my_order for each_row
begin
-- 觸發器內容開始
update my_goods set inv = inv-new.g_number where id = new.id ;
end
delimit ;
查看觸發器
查看所有觸發器或者模糊匹配
show trigger [like ‘pattern‘]
查看觸發器創建語句:
show create trigger 觸發器名字 ;
所有的觸發器都會保存到系統的一張表中 information_schemea.triggers
使用觸發器
觸發器:不需要手動調用,當某種情況(觸發類型)下會自動觸發.
修改觸發器&&刪除觸發器
觸發器不能被修改,只能刪除之後新增
drop trigger 觸發器名稱 ;
觸發器記錄
觸發器記錄 : 不管觸發器是否觸發了,只要當某種操作準備執行,系統就會將當前操作記錄的當前狀態和即將執行之後的新的狀態給分別保留下來,供觸發器使用.其中要操作當前狀態保存在old中,操作之後的可能形態保存到new中.
old 代表的是就記錄,new代表新紀錄
插入的時候沒有old , 刪除的時候沒有new. 任何一條記錄除了有數據,還有字段名字.
old和new的使用方式 : old.字段名 / new.字段名 (new 代表假設發生之後的結果)
執行代碼結構
執行代碼結構 : 順序結構,分支結構,循環結構
分支結構:實現準備多個代碼塊,按照條件選擇性執行某段代碼
在MySql中只有 if 分之
基本語法:
-----------------------------------------------------------
if 條件判斷 then
-- 滿足條件要執行的代碼
else
-- 不滿足條件執行的代碼
end if ;
------------------------------------------------------------
觸發器結合if分支,若商品數量不夠,就不能生成訂單.
循環結構
循環結構: 某段代碼在指定的條件重復執行
while循環基本語法
------------------------------------------------------------
while 條件判斷 do
-- 滿足條件要執行的代碼
-- 變更循環條件
end while ;
------------------------------------------------------------
循環控制 : 在循環內部進行循環判斷,mysql中沒有continue和break.
iterate : 叠代,類似continue 後面的代碼不執行,循環重新來過
leave : 離開 類似break 整個循環結束.
使用方式: iterate / leave 循環名字;
-- 定義循環名字
循環名字 : while 條件 do
-- 循環體
--循環控制
iterate / leave 循環名字 ;
end while ;
( 17 )MySQL中的觸發器