MySQL觸發(fā)器學(xué)習(xí)總結(jié)
更新時(shí)間:2012年09月04日 22:39:22 作者:
創(chuàng)建觸發(fā)器,當(dāng)往order表中添加記錄是,更新goods表,大家可以看下語句即可
復(fù)制代碼 代碼如下:
#創(chuàng)建觸發(fā)器,當(dāng)往order表中添加記錄是,更新goods表
delimiter $
CREATE TRIGGER trigger1
AFTER INSERT ON `order`
FOR EACH ROW
BEGIN
UPDATE goods SET num=num-new.much WHERE id=new.gid;
END$
執(zhí)行
INSERT INTO `order` (gid,much) VALUES(1,5)
后
SELECT * FROM goods WHERE id=1
發(fā)現(xiàn) 電視機(jī)的數(shù)量剩下30
當(dāng)執(zhí)行
INSERT INTO `order` (gid,much) VALUES(2,100)
后
發(fā)現(xiàn)
冰箱的數(shù)量剩下-77
這是一個(gè)很明顯的漏洞,如何補(bǔ)救呢?
由于update事件是在insert之后發(fā)生的,所以我們無法事先對(duì)用戶的下單數(shù)量(即order表
中的much字段)進(jìn)行過濾
解決辦法:
在創(chuàng)建觸發(fā)器的時(shí)候,將after關(guān)鍵字改成before,并對(duì)用戶的下單數(shù)量進(jìn)行判斷
首先,得刪除先去的觸發(fā)器
drop trigger trigger1;
復(fù)制代碼 代碼如下:
#創(chuàng)建觸發(fā)器
#觸發(fā)時(shí)間:before
delimiter $
CREATE TRIGGER trigger1
BEFORE INSERT ON `order`
FOR EACH ROW
BEGIN
IF new.much >5 THEN
SET new.much=5
END IF;
UPDATE goods SET num=num-new.much WHERE id=new.gid;
END$
這樣,當(dāng)執(zhí)行INSERT INTO `order` (gid,much) VALUES(2,100)的時(shí)候,寫入order表的下單數(shù)量其實(shí)只有5,同樣,goods表中的庫存數(shù)量只有減少5,因?yàn)樵趇nsert操作之前先觸發(fā)了
update操作,借此可以對(duì)下單數(shù)量做個(gè)判斷
相關(guān)文章
MySQL使用IF函數(shù)動(dòng)態(tài)執(zhí)行where條件的方法
這篇文章主要介紹了MySQL使用IF函數(shù)來動(dòng)態(tài)執(zhí)行where條件,詳細(xì)介紹了IF函數(shù)在WHERE條件中的使用,MySQL的IF()函數(shù),接受三個(gè)表達(dá)式,如果第一個(gè)表達(dá)式為true,而不是零且不為NULL,它將返回第二個(gè)表達(dá)式,需要的朋友可以參考下2022-09-09解決遠(yuǎn)程連接MySQL報(bào)錯(cuò):2003 - Can‘t connect to&nb
這篇文章主要給大家介紹了解決遠(yuǎn)程連接MySQL報(bào)錯(cuò):2003 - Can‘t connect to MySQL server on ‘X.X.X.X‘ (10060 “Unknown error“)問題的方案,文中有詳細(xì)的解決步驟,需要的朋友可以參考下2023-09-09mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解
這篇文章主要給大家介紹了關(guān)于mysql如何利用參數(shù)sql_safe_updates限制update/delete范圍的相關(guān)資料文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10Mysql 乘法除法精度不一致問題(除法后四位小數(shù))
這篇文章主要介紹了Mysql 乘法除法精度不一致,除法后四位小數(shù),本文通過問題分析實(shí)例代碼講解,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03詳解在Windows環(huán)境下訪問linux虛擬機(jī)中MySQL數(shù)據(jù)庫
這篇文章主要介紹了如何Windows環(huán)境下訪問linux虛擬機(jī)中MySQL數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)
日期時(shí)間處理對(duì)大家來說應(yīng)該都不陌生了,下面這篇文章主要給大家介紹了關(guān)于MySQL常用的日期時(shí)間函數(shù),文中通過圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03