国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

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

2024-07-24 13:01:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

復(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ā)生的,所以我們無(wú)法事先對(duì)用戶的下單數(shù)量(即order表
中的much字段)進(jìn)行過(guò)濾
解決辦法:
在創(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í)候,寫(xiě)入order表的下單數(shù)量其實(shí)只有5,同樣,goods表中的庫(kù)存數(shù)量只有減少5,因?yàn)樵趇nsert操作之前先觸發(fā)了
update操作,借此可以對(duì)下單數(shù)量做個(gè)判斷
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 丹阳市| 鸡泽县| 南漳县| 宝清县| 娄烦县| 舒城县| 昭通市| 滨海县| 九江县| 揭西县| 正安县| 历史| 桦甸市| 噶尔县| 福海县| 宜兰市| 新乡市| 库尔勒市| 合作市| 罗源县| 科技| 荆州市| 昭平县| 武威市| 成都市| 盐池县| 长治市| 赞皇县| 景谷| 阳城县| 疏附县| 黄平县| 海安县| 凌海市| 花垣县| 遂平县| 赤城县| 泰来县| 东港市| 临潭县| 新和县|