MySQL觸發(fā)器的使用詳解
1.為什么需要觸發(fā)器
有一些表是互相關(guān)聯(lián)的,比如說商品表和庫存表,我們對商品表的數(shù)據(jù)進行操作,那么對應(yīng)的庫存表還得發(fā)生變化,這樣才可以保證數(shù)據(jù)的完整。如果我們是自己手動維護的話,比較麻煩。
這個時候我們可以使用觸發(fā)器,創(chuàng)建一個觸發(fā)器,讓商品信息數(shù)據(jù)的插入操作自動觸發(fā)庫存數(shù)據(jù)的插入操作等,這樣我們就不需要擔(dān)心因為忘記添加庫存數(shù)據(jù)而導(dǎo)致數(shù)據(jù)丟失了。
2.觸發(fā)器概述
- MySQL是從5.0.2版本開始支持觸發(fā)器的
- MySQL的觸發(fā)器和存儲過程一樣都是嵌入到MySQL服務(wù)器的一段程序
- 觸發(fā)器是由某一個事件來觸發(fā)某個操作,這些事件包括insert,delete,update事件
- 若定義了觸發(fā)程序,那么數(shù)據(jù)庫執(zhí)行這些語句的時候,就相當(dāng)于事件發(fā)生,會自動激發(fā)觸發(fā)器執(zhí)行相應(yīng)的操作
- 如果對數(shù)據(jù)庫中的表的數(shù)據(jù)進行插入等操作的時候,需要自動執(zhí)行一些數(shù)據(jù)庫邏輯的時候,我們可以用觸發(fā)器來實現(xiàn)。
3.觸發(fā)器的創(chuàng)建
3.1語法
觸發(fā)器是作用在表上的,比如說我們希望表A新增一條記錄的時候就觸發(fā) 觸發(fā)器的執(zhí)行,而且還要選擇觸發(fā)器是在insert語句執(zhí)行之前執(zhí)行觸發(fā)器還是之后。
for each row表明,每執(zhí)行一次事件(insert,update或delete)就會觸發(fā)一次觸發(fā)器
CREATE TRIGGER 觸發(fā)器名稱
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名
FOR EACH ROW
觸發(fā)器執(zhí)行的語句塊;
說明:
表名:表示觸發(fā)器監(jiān)控的對象。
BEFORE|AFTER:表示觸發(fā)的時間。BEFORE 表示在事件之前觸發(fā);AFTER 表示在事件之后觸發(fā)。
INSERT|UPDATE|DELETE:表示觸發(fā)的事件。
- INSERT 表示插入記錄時觸發(fā);
- UPDATE 表示更新記錄時觸發(fā);
- DELETE 表示刪除記錄時觸發(fā)。
觸發(fā)器執(zhí)行的語句塊:可以是單條SQL語句,也可以是由BEGIN…END結(jié)構(gòu)組成的復(fù)合語句塊。
3.2 案例演示
先準備表
CREATE TABLE test_trigger ( id INT PRIMARY KEY AUTO_INCREMENT, t_note VARCHAR(30) ); CREATE TABLE test_trigger_log ( id INT PRIMARY KEY AUTO_INCREMENT, t_log VARCHAR(30) );
要求:創(chuàng)建觸發(fā)器:創(chuàng)建名稱為before_insert的觸發(fā)器,向test_trigger數(shù)據(jù)表插入數(shù)據(jù)之前,向test_trigger_log數(shù)據(jù)表中插入before_insert的日志信息。


4.查看觸發(fā)器
查看觸發(fā)器是查看數(shù)據(jù)庫中已經(jīng)存在的觸發(fā)器的定義,狀態(tài)和語法信息等
方式一:查看當(dāng)前數(shù)據(jù)庫的所有觸發(fā)器的定義
show triggers\G 注意,在SQLyog中,不能加上\G

方式二:查看當(dāng)前數(shù)據(jù)庫中某一個觸發(fā)器的定義
show create trigger 觸發(fā)器名

方式三:從系統(tǒng)庫information_schema的TRIGGERS表中查詢“salary_check_trigger”觸發(fā)器的信息
SELECT * FROM information_schema.TRIGGERS;
5.刪除觸發(fā)器
觸發(fā)器也是數(shù)據(jù)庫對象,觸發(fā)器也是用drop語句來刪除
drop trigger if exists 觸發(fā)器名;
總結(jié)
到此這篇關(guān)于MySQL觸發(fā)器使用的文章就介紹到這了,更多相關(guān)MySQL觸發(fā)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
InnoDb 體系架構(gòu)和特性詳解 (Innodb存儲引擎讀書筆記總結(jié))
下面小編就為大家?guī)硪黄狪nnoDb 體系架構(gòu)和特性詳解 (Innodb存儲引擎讀書筆記總結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
Windows10系統(tǒng)下MySQL(8.0.37)安裝與配置教程
相信很多人都遇到過安裝Mysql的時候出現(xiàn)各種各樣的問題,下面這篇文章主要給大家介紹了關(guān)于Windows10系統(tǒng)下MySQL(8.0.37)安裝與配置的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-07-07
MySQL數(shù)據(jù)庫自增主鍵的間隔不為1的解決方式
這篇文章主要介紹了MySQL數(shù)據(jù)庫自增主鍵的間隔不為1的解決方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
mysql中You can’t specify target table for update in FROM clau
這篇文章主要介紹了mysql中You can’t specify target table for update in FROM clause錯誤解決方法,需要的朋友可以參考下2015-02-02

