MySQL觸發(fā)器學習總結(jié)_MySQL教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:Mysql中“Insert into xxx on duplicate key update”問題在看代碼的過程中碰到了這一用法,不太理解,google了一下。它的意義其實是如果在insert語句末尾制定了on duplicate key update語句的話,則當插入行會導致一個unique索引或者primary key中出現(xiàn)重復值,則執(zhí)行update中的語句,否則才插入新行。 例如,如果列a被定義為u
- #創(chuàng)建觸發(fā)器,當往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) 電視機的數(shù)量剩下30
- 當執(zhí)行
- INSERT INTO `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ā)器
- drop trigger trigger1;
- #創(chuàng)建觸發(fā)器
- #觸發(fā)時間: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$
- 這樣,當執(zhí)行INSERT INTO `order` (gid,much) VALUES(2,100)的時候,寫入order表的下單數(shù)量其實只有5,同樣,goods表中的庫存數(shù)量只有減少5,因為在insert操作之前先觸發(fā)了
- update操作,借此可以對下單數(shù)量做個判斷
分享:Mysql字符集設置指南在mysql客戶端與mysql服務端之間,存在著一個字符集轉(zhuǎn)換器。 character_set_client =gbk:轉(zhuǎn)換器就知道客戶端發(fā)送過來的是gbk格式的編碼 character_set_connection=gbk:將客戶端傳送過來的數(shù)據(jù)轉(zhuǎn)換成gbk格式 character_set_results=gbk: 注: 以上三個字符集可以使用s
相關(guān)MySQL教程:
- MSSQL清空日志刪除日志文件
- 關(guān)于數(shù)據(jù)庫中保留小數(shù)位的問題
- 解析mysql與Oracle update的區(qū)別
- mysql 導入導出數(shù)據(jù)庫以及函數(shù)、存儲過程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現(xiàn)Can''t create/write to file ''#sql_5c0_0.MYD''的問題
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- mysql重裝后出現(xiàn)亂碼設置為utf8可解決
- 淺析一個MYSQL語法(在查詢中使用count)的兼容性問題
- 解析MySQL中INSERT INTO SELECT的使用
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- mysql創(chuàng)建函數(shù)出現(xiàn)1418錯誤的解決辦法
- MySQL數(shù)據(jù)庫InnoDB數(shù)據(jù)恢復工具的使用小結(jié)詳解
- MySQL的重裝問題解決方法
- mysql中text與varchar與char的區(qū)別
- MySQL 替換某字段內(nèi)部分內(nèi)容的UPDATE語句
- 解析SQLite中的常見問題與總結(jié)詳解
- MYSQL 事件高度器
- sql語句:SQLServer字段排序(按筆畫,拼音,拼音首字母)
- 利用Xtrabackup工具備份及恢復(MySQL DBA的必備工具)
- java連接mysql數(shù)據(jù)庫亂碼怎么辦
猜你也喜歡看這些
- SQL Server2012在開發(fā)中的一些新特性
- 解讀數(shù)據(jù)庫的一些常識
- 配置SQL SERVER合并復制之(四)設置Distributor的安全
- SQL Server的基本功能性語句介紹
- 淺談SQL Server跟蹤數(shù)據(jù)實現(xiàn)索引優(yōu)化向?qū)?/a>
- SQL2008 附加數(shù)據(jù)庫提示5120錯誤解決方法
- 關(guān)于避免在 PL/SQL 中使用嵌套游標查詢
- SQL Server 2008登錄錯誤:無法連接到(local)解決方法
- 透視MySQL數(shù)據(jù)庫之更新語句
- 教你一招:MSSQL數(shù)據(jù)庫索引的應用
- 相關(guān)鏈接:
- 教程說明:
MySQL教程-MySQL觸發(fā)器學習總結(jié)
。