欧美一级精品免费播放-亚洲精品久久久久久人妖-中文字幕一区二区精品在线-国产精品亚洲一区二区在 色天天综合色天天久久婷婷_日韩綜合网_精品国产香蕉伊思人在线_99视频国产在线观看播放

注冊|登錄

聯(lián)系電話:024-31891684  13390130939
沈陽軟件公司--沈陽軟件定制

沈陽軟件開發(fā)_沈陽軟件公司_沈陽軟件定制/軟件/最新技術(shù)

Latest technology最新技術(shù)

MySQL觸發(fā)器學(xué)習(xí)總結(jié)

瀏覽量:2622

#創(chuàng)建觸發(fā)器,當(dāng)往order表中添加記錄是,更新goods表

delimiter $

CREATETRIGGERtrigger1

AFTER INSERTON`order`

FOREACH ROW

BEGIN

UPDATEgoods SETnum=num-new.much WHEREid=new.gid;

END$

 

執(zhí)行

INSERTINTO`order` (gid,much) VALUES(1,5)

SELECT*FROMgoods WHEREid=1

發(fā)現(xiàn)電視機的數(shù)量剩下30

 

當(dāng)執(zhí)行

INSERTINTO`order` (gid,much) VALUES(2,100)

發(fā)現(xiàn)

冰箱的數(shù)量剩下-77

 

這是一個很明顯的漏洞,如何補救呢?

由于update事件是在insert之后發(fā)生的,所以我們無法事先對用戶的下單數(shù)量(即order表

中的much字段)進行過濾

解決辦法:

在創(chuàng)建觸發(fā)器的時候,將after關(guān)鍵字改成before,并對用戶的下單數(shù)量進行判斷

 

 

首先,得刪除先去的觸發(fā)器

droptriggertrigger1;

 

#創(chuàng)建觸發(fā)器

#觸發(fā)時間:before

delimiter $

CREATETRIGGERtrigger1

BEFORE INSERTON`order`

FOREACH ROW

BEGIN

IFnew.much >5THEN

SETnew.much=5

ENDIF;

UPDATEgoods SETnum=num-new.much WHEREid=new.gid;

END$
這樣,當(dāng)執(zhí)行INSERT INTO `order` (gid,much) VALUES(2,100)的時候,寫入order表的下單數(shù)量其實只有5,同樣,goods表中的庫存數(shù)量只有減少5,因為在insert操作之前先觸發(fā)了
update操作,借此可以對下單數(shù)量做個判斷

沈陽團購網(wǎng)|營口網(wǎng)站制作|沈陽軟件公司|軟件定制|網(wǎng)站建設(shè)|加盟易勢|提交問題