小貝_mysql 觸發器使用,小貝_mysql觸發器
觸發器簡要
1、觸發器基本概念
2、觸發器文法及實戰例子
3、before和after區別
一、觸發器基本概念
1、一觸即發
2、作用: 監視某種情況並觸發某種操作
3、觀察情境
一個電子商城:
商品表,goods
主鍵(goods_id) |
商品名稱(goods_name) |
庫存(goods_number) |
1 |
iphone6 |
10 |
2 |
小米手機 |
28 |
訂單表,orders
訂單主鍵(order_id) |
商品主鍵(goods_id) |
購買數量(buy_num) |
1 |
2 |
3 |
2 |
1 |
4 |
從php的角度看,完成下單與減少庫存的邏輯如下:
a、下單後,往orders表插入資料:
insert into orders(goods_id,bug_num)values(2,3);
b、修改goods對應商品的庫存:
update goods setgoods_number=goods_number-3 where goods_id=2;
總結: 這兩個邏輯可以看成是一個整體,或者說,insert—>觸發update
處理方案: 使用觸發器來解決上述問題,我們可以監視某張表的變化,當發生某種變化時,觸發某個操作
4、觸發器監視以及觸發什麼變化
a、監視update/insert/delete
b、觸發update/insert/delete
二、觸發器文法
1、建立文法的四個要素
2、建立觸發器
2.1、測試案例的表結構
#商品表 create table goods (goods_id int,goods_name varchar(10),goods_number smallint)charset=utf8; insert into goods values(1,'iphone6',10),(2,'小米手機',28); |
#訂單表 create table orders (order_id int,goods_id int,buy_num smallint)charset=utf8; insert into orders values(1,2,3),(2,1,4); |
|
2.2、建立觸發器文法
createtrigger triggerName
after/beforeinsert/update/deleteon Table
begin
sql語句(一句或多句sql)
end;
2.3、觸發器執行個體
2.3.1、建立觸發器,往訂單表orders插入資料時,更新商品表goods的庫存量
往orders表插入資料前,各個表的資料如下
往orders表插入資料:
查看goods表的資料:
此時,orders表插入的是iphone6兩台,但是減少的卻是小米手機商品的庫存。
當往orders表插入的是小米手機兩台呢?
此時,減少的也是小米手機,但是減少的是1,而不是2
問題:出在哪裡?
1、查看剛建立的觸發器資訊
原來觸發的sql語句是固定某個商品id的,因此,觸發只對該商品id發生作用
2、如何在觸發器引用行的值?
對於insert而言,新增的行,用new來表示,行中的每一列的值,用new.列名來表示
3、修改觸發器t1(刪除原來重建立立)
4、驗證結果
插入前,各個表資料如下
插入orders表,iPhone6三台
插入orders表,小米手機五台
2.3.2、建立觸發器,往訂單表orders刪除資料時,更新商品表goods的庫存量
a、建立觸發器t2
b、刪除orders的資料
b1、刪除前,各個表資料
b2、刪除後,各個表資料:
總結:
對於delete而言,如何在觸發器引用行的值?
對於delete操作來說,它要操作的資料,已經是存在表中了,因此用old來表示,行中的每一列的值,用old.列名來表示
2.3.3、建立觸發器,往訂單表orders修改資料時,更新商品表goods的庫存量
a、建立觸發器t3
b、修改orders表資料
b1、修改前,各個表的資料
b2、修改後,各個表的資料
總結:
對於update而言,如何在觸發器引用行的值?
對於update操作來說,它要操作的資料,已經是存在表中了,因此用old來引用修改前的值,修改後則為用new來引用新值
2.4、查看觸發器和刪除觸發器文法
2.4.1、查看所有觸發器
2.4.2、查看某個觸發器
2.4.3、刪除觸發器
三、before與after的區別
1、區別:
a、after是先完成資料的增刪改後,再觸發
觸發中的語句晚於增刪改,無法影響前面的增刪改動作
b、before是先完成觸發,再增刪改
觸發的語句先於監視的增刪改發生,我們有機會判斷,修改即將發生的操作
2、案例:
對於所下訂單進行判斷,如果訂單的資料>5,則認為是非法訂單,強制把所訂商品資料改成5
2.1、建立觸發器
2.2、插入前,各個表的資料
2.3、插入後,各個表的資料
The quieter you become,the more you are able to hear!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。