觸發器
當某個時間發生的時候,自動觸發的一段代碼。
觸發器由事件主體(對象),事件類型,事件觸發時間
用戶購物
商品表:商品信息,商品庫存
訂單表:訂單信息,商品信息,商品數量
當用戶下訂單之後,商品表的商品庫存需要減少
用戶退訂,商品的商品庫存需要增加
1.訂單表增加記錄(有商品數量)
2.商品表減少庫存(訂單表對應商品信息變化)
語法:
create trigger 觸發器名字 事件觸發時間 事件類型 on 表 for each row
[begin]
//觸發體,如果觸發體裡只有一條語句,那麼begin和end可以沒有
//如果觸發體裡有多條語句,那麼begin和end是必須的
[end]
事件觸發時間:before在操作之前,after在操作之後
事件類型:insert插入,update更改,delete刪除
創建一個最簡觸發器
調用觸發器:系統自動調用
-- 當訂單表插入一條數據後,觸發定義的觸發器order_goods_t
觸發器裡的操作不能固定,應當根據當前實際變更的數據信息來進行操作。
old:代表被操作之前的記錄對應是數據,觸發器針對的記錄被變更之前
new:代表被操作之後的記錄對應的數據,觸發器針對的記錄被變更之後
刪除觸發器:
語法:drop trigger 觸發器名字
驗證
在觸發器中使用對應的觸發觸發器的記錄
觸發器使用
觸發器有多少種?
六種:觸發時間 和 觸發事件類型 的積
before/after insert/update/delete;
哪些事件是沒有old,哪些事件沒有new
insert操作沒有old,delete沒有new
一張表最多可以有6個觸發器。
作業:前提是一張表有六個觸發器
1.insert into 表名 (值列表) on duplicate key update,會執行什麼觸發器?
2.replace into表名 (值列表)
if結構
語法:
if 條件判斷 then
執行相應於巨
end if;
如果商品表中的數量不足了,訂單則不應該生成?觸發器該怎麼操作。
在訂單表插入數據之前,先對商品表商品數量進行判斷。
1.因為是在插入之前先執行觸發器,那麼還沒有在訂單表裡插入數據
2.判斷失敗之後,觸發器不能中斷操作,沒有辦法限制後續插入訂單表的SQL語句的執行