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

注冊(cè)|登錄

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

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

Latest technology最新技術(shù)

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

瀏覽量:2558

#創(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;

#創(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è)判斷

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