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表中的庫(kù)存數(shù)量只有減少5,因?yàn)樵趇nsert操作之前先觸發(fā)了
update操作,借此可以對(duì)下單數(shù)量做個(gè)判斷
您可能感興趣的文章:
相關(guān)文章
mysql 5.7.15 安裝配置方法圖文教程(windows)
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.15 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
深入理解MySQL中MVCC與BufferPool緩存機(jī)制
這篇文章主要介紹了深入理解MySQL中MVCC與BufferPool緩存機(jī)制,MySQL默認(rèn)RR隔離級(jí)別就是通過該機(jī)制來保證的MVCC,更多主題相關(guān)內(nèi)容,需要的可以參考下面文章內(nèi)容介紹2022-05-05
Mysql的Table doesn't exist問題及解決
這篇文章主要介紹了Mysql的Table doesn't exist問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
mysql之?dāng)?shù)字函數(shù)的具體使用
本文主要介紹了mysql之?dāng)?shù)字函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
MySQL高級(jí)特性——數(shù)據(jù)表分區(qū)的概念及機(jī)制詳解
當(dāng)數(shù)據(jù)表過大時(shí),通過普通的查詢優(yōu)化技巧已經(jīng)無法大幅度提升性能,此時(shí)往往需要進(jìn)行分區(qū)分表優(yōu)化。分區(qū)其實(shí)是將一張邏輯上統(tǒng)一的表在物理上劃分成了多張表。分區(qū)操作對(duì)使用者而言是一個(gè)黑盒操作,但是如果你從文件系統(tǒng)上看,就會(huì)看到分區(qū)數(shù)據(jù)表的實(shí)際存儲(chǔ)方式是分開的。2021-05-05

