欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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表中的庫存數(shù)量只有減少5,因?yàn)樵趇nsert操作之前先觸發(fā)了
update操作,借此可以對(duì)下單數(shù)量做個(gè)判斷

相關(guān)文章

  • MySQL使用IF函數(shù)動(dòng)態(tài)執(zhí)行where條件的方法

    MySQL使用IF函數(shù)動(dòng)態(tài)執(zhí)行where條件的方法

    這篇文章主要介紹了MySQL使用IF函數(shù)來動(dòng)態(tài)執(zhí)行where條件,詳細(xì)介紹了IF函數(shù)在WHERE條件中的使用,MySQL的IF()函數(shù),接受三個(gè)表達(dá)式,如果第一個(gè)表達(dá)式為true,而不是零且不為NULL,它將返回第二個(gè)表達(dá)式,需要的朋友可以參考下
    2022-09-09
  • MySQL中insert語句的使用與優(yōu)化教程

    MySQL中insert語句的使用與優(yōu)化教程

    這篇文章主要介紹了MySQL中insert語句的使用與優(yōu)化教程,使用insert語句插入數(shù)據(jù)是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-03-03
  • 通過SQL語句來備份,還原數(shù)據(jù)庫

    通過SQL語句來備份,還原數(shù)據(jù)庫

    這里僅僅用到了一種方式而已,把數(shù)據(jù)庫文件備份到磁盤然后在恢復(fù).
    2010-02-02
  • 解決遠(yuǎn)程連接MySQL報(bào)錯(cuò):2003 - Can‘t connect to MySQL server on ‘X.X.X.X‘ (10060 “Unknown error“)問題

    解決遠(yuǎn)程連接MySQL報(bào)錯(cuò):2003 - Can‘t connect to&nb

    這篇文章主要給大家介紹了解決遠(yuǎn)程連接MySQL報(bào)錯(cuò):2003 - Can‘t connect to MySQL server on ‘X.X.X.X‘ (10060 “Unknown error“)問題的方案,文中有詳細(xì)的解決步驟,需要的朋友可以參考下
    2023-09-09
  • mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解

    mysql利用參數(shù)sql_safe_updates限制update/delete范圍詳解

    這篇文章主要給大家介紹了關(guān)于mysql如何利用參數(shù)sql_safe_updates限制update/delete范圍的相關(guān)資料文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • MySQL 8.0.13 下載安裝教程圖文詳解

    MySQL 8.0.13 下載安裝教程圖文詳解

    這篇文章主要介紹了MySQL 8.0.13 下載安裝教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • Mysql 乘法除法精度不一致問題(除法后四位小數(shù))

    Mysql 乘法除法精度不一致問題(除法后四位小數(shù))

    這篇文章主要介紹了Mysql 乘法除法精度不一致,除法后四位小數(shù),本文通過問題分析實(shí)例代碼講解,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳解在Windows環(huán)境下訪問linux虛擬機(jī)中MySQL數(shù)據(jù)庫

    詳解在Windows環(huán)境下訪問linux虛擬機(jī)中MySQL數(shù)據(jù)庫

    這篇文章主要介紹了如何Windows環(huán)境下訪問linux虛擬機(jī)中MySQL數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)

    MySQL常用的日期時(shí)間函數(shù)匯總(附實(shí)例)

    日期時(shí)間處理對(duì)大家來說應(yīng)該都不陌生了,下面這篇文章主要給大家介紹了關(guān)于MySQL常用的日期時(shí)間函數(shù),文中通過圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • MySQL中的undo日志

    MySQL中的undo日志

    這篇文章主要介紹了MySQL中的undo日志的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL的相關(guān)知識(shí),感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論