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

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

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

2024-07-24 12:41:55
字體:
供稿:網(wǎng)友
  1. #創(chuàng)建觸發(fā)器,當(dāng)往order表中添加記錄是,更新goods表 
  2. delimiter $ 
  3. CREATE TRIGGER trigger1  
  4. AFTER INSERT ON `order
  5. FOR EACH ROW 
  6. BEGIN 
  7. UPDATE goods SET num=num-new.much WHERE id=new.gid; 
  8. END
  9.  
  10. 執(zhí)行 
  11. INSERT INTO `order` (gid,much) VALUES(1,5) 
  12. 后 
  13. SELECT * FROM goods WHERE id=1 
  14. 發(fā)現(xiàn) 電視機(jī)的數(shù)量剩下30 
  15.  
  16. 當(dāng)執(zhí)行 
  17. INSERT INTO `order` (gid,much) VALUES(2,100) 
  18. 后 
  19. 發(fā)現(xiàn) 
  20. 冰箱的數(shù)量剩下-77 
  21.  
  22. 這是一個(gè)很明顯的漏洞,如何補(bǔ)救呢? 
  23. 由于update事件是在insert之后發(fā)生的,所以我們無(wú)法事先對(duì)用戶的下單數(shù)量(即order表  
  24. 中的much字段)進(jìn)行過濾 
  25. 解決辦法: 
  26. 在創(chuàng)建觸發(fā)器的時(shí)候,將after關(guān)鍵字改成before,并對(duì)用戶的下單數(shù)量進(jìn)行判斷 
  27.  
  28.  
  29. 首先,得刪除先去的觸發(fā)器 
  30. drop trigger trigger1; 
  31.  
  32. #創(chuàng)建觸發(fā)器 
  33. #觸發(fā)時(shí)間:before 
  34. delimiter $ 
  35. CREATE TRIGGER trigger1 
  36. BEFORE INSERT ON `order
  37. FOR EACH ROW 
  38. BEGIN 
  39. IF new.much >5 THEN 
  40. SET new.much=5 
  41. END IF; 
  42. UPDATE goods SET num=num-new.much WHERE id=new.gid; 
  43. END
  44. 這樣,當(dāng)執(zhí)行INSERT INTO `order` (gid,much) VALUES(2,100)的時(shí)候,寫入order表的下單數(shù)量其實(shí)只有5,同樣,goods表中的庫(kù)存數(shù)量只有減少5,因?yàn)樵?/span>insert操作之前先觸發(fā)了 
  45. update操作,借此可以對(duì)下單數(shù)量做個(gè)判斷 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 和硕县| 元江| 大竹县| 临清市| 南开区| 南皮县| 湖北省| 乌恰县| 宜都市| 三台县| 武夷山市| 隆子县| 乐亭县| 松滋市| 平度市| 长宁县| 桂平市| 达孜县| 易门县| 遂宁市| 乐亭县| 齐齐哈尔市| 清徐县| 眉山市| 凤台县| 东乡族自治县| 七台河市| 盐源县| 汉寿县| 沙湾县| 鹿泉市| 彩票| 嘉善县| 洪江市| 新泰市| 昌黎县| 柏乡县| 卢龙县| 大安市| 桑日县| 都江堰市|