MySQL筆記之觸發(fā)器的應(yīng)用
創(chuàng)建觸發(fā)器
創(chuàng)建只有一個(gè)執(zhí)行語(yǔ)句的觸發(fā)器
CREATE TRIGGER 觸發(fā)器名 BEFORE|AFTER 觸發(fā)事件
ON 表名 FOR EACH ROW 執(zhí)行語(yǔ)句
其中,觸發(fā)器名參數(shù)指要?jiǎng)?chuàng)建的觸發(fā)器的名字
BEFORE和AFTER參數(shù)指定了觸發(fā)執(zhí)行的時(shí)間,在事件之前或是之后
FOR EACH ROW表示任何一條記錄上的操作滿足觸發(fā)事件都會(huì)觸發(fā)該觸發(fā)器
mysql> CREATE TRIGGER trig1 AFTER INSERT
-> ON work FOR EACH ROW
-> INSERT INTO time VALUES(NOW());
Query OK, 0 rows affected (0.09 sec)
上面創(chuàng)建了一個(gè)名為trig1的觸發(fā)器,一旦在work中有插入動(dòng)作,就會(huì)自動(dòng)往time表里插入當(dāng)前時(shí)間
創(chuàng)建有多個(gè)執(zhí)行語(yǔ)句的觸發(fā)器
CREATE TRIGGER 觸發(fā)器名 BEFORE|AFTER 觸發(fā)事件
ON 表名 FOR EACH ROW
BEGIN
執(zhí)行語(yǔ)句列表
END
其中,BEGIN與END之間的執(zhí)行語(yǔ)句列表參數(shù)表示需要執(zhí)行的多個(gè)語(yǔ)句,不同語(yǔ)句用分號(hào)隔開(kāi)
tips:一般情況下,mysql默認(rèn)是以 ; 作為結(jié)束執(zhí)行語(yǔ)句,與觸發(fā)器中需要的分行起沖突
為解決此問(wèn)題可用DELIMITER,如:DELIMITER ||,可以將結(jié)束符號(hào)變成||
當(dāng)觸發(fā)器創(chuàng)建完成后,可以用DELIMITER ;來(lái)將結(jié)束符號(hào)變成;
mysql> DELIMITER ||
mysql> CREATE TRIGGER trig2 BEFORE DELETE
-> ON work FOR EACH ROW
-> BEGIN
-> INSERT INTO time VALUES(NOW());
-> INSERT INTO time VALUES(NOW());
-> END
-> ||
Query OK, 0 rows affected (0.06 sec)
mysql> DELIMITER ;
上面的語(yǔ)句中,開(kāi)頭將結(jié)束符號(hào)定義為||,中間定義一個(gè)觸發(fā)器,一旦有滿足條件的刪除操作
就會(huì)執(zhí)行BEGIN和END中的語(yǔ)句,接著使用||結(jié)束
最后使用DELIMITER ; 將結(jié)束符號(hào)還原
查看觸發(fā)器
SHOW TRIGGERS語(yǔ)句查看觸發(fā)器信息
mysql> SHOW TRIGGERS\G;
*************************** 1. row ***************************
Trigger: trig1
Event: INSERT
Table: work
Statement: INSERT INTO time VALUES(NOW())
Timing: AFTER
Created: NULL
sql_mode:
Definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
結(jié)果會(huì)顯示所有觸發(fā)器的基本信息
tips:SHOW TRIGGERS語(yǔ)句無(wú)法查詢指定的觸發(fā)器
在triggers表中查看觸發(fā)器信息
mysql> SELECT * FROM information_schema.triggers\G
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: person
TRIGGER_NAME: trig1
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: person
EVENT_OBJECT_TABLE: work
ACTION_ORDER: 0
ACTION_CONDITION: NULL
ACTION_STATEMENT: INSERT INTO time VALUES(NOW())
結(jié)果顯示了所有觸發(fā)器的詳細(xì)信息,同時(shí),該方法可以查詢制定觸發(fā)器的詳細(xì)信息
mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='trig1'\G
*************************** 1. row ***************************
TRIGGER_CATALOG: def
TRIGGER_SCHEMA: person
TRIGGER_NAME: trig1
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: def
EVENT_OBJECT_SCHEMA: person
EVENT_OBJECT_TABLE: work
tips:所有觸發(fā)器信息都存儲(chǔ)在information_schema數(shù)據(jù)庫(kù)下的triggers表中
可以使用SELECT語(yǔ)句查詢,如果觸發(fā)器信息過(guò)多,最好通過(guò)TRIGGER_NAME字段指定查詢
刪除觸發(fā)器
mysql> DROP TRIGGER trig1;
Query OK, 0 rows affected (0.04 sec)
刪除觸發(fā)器之后最好使用上面的方法查看一遍
同時(shí),也可以使用database.trig來(lái)指定某個(gè)數(shù)據(jù)庫(kù)中的觸發(fā)器
tips:如果不需要某個(gè)觸發(fā)器時(shí)一定要將這個(gè)觸發(fā)器刪除,以免造成意外操作
- MySQL觸發(fā)器使用詳解
- mysql觸發(fā)器(Trigger)簡(jiǎn)明總結(jié)和使用實(shí)例
- MYSQL設(shè)置觸發(fā)器權(quán)限問(wèn)題的解決方法
- mysql 觸發(fā)器實(shí)現(xiàn)兩個(gè)表的數(shù)據(jù)同步
- MySQL觸發(fā)器概念、原理與用法詳解
- MySQL如何創(chuàng)建觸發(fā)器
- MySQL 在觸發(fā)器里中斷記錄的插入或更新?
- 如何測(cè)試mysql觸發(fā)器和存儲(chǔ)過(guò)程
- Mysql中的觸發(fā)器簡(jiǎn)單介紹及使用案例
- 從零開(kāi)始MySQL觸發(fā)器實(shí)戰(zhàn)攻略
相關(guān)文章
mysql遇到load data導(dǎo)入文件數(shù)據(jù)出現(xiàn)1290錯(cuò)誤的解決方案
這篇文章主要介紹了mysql遇到load data導(dǎo)入文件數(shù)據(jù)出現(xiàn)1290錯(cuò)誤的解決方案,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2018-07-07
解決MySql客戶端秒退問(wèn)題(找不到my.ini)
這篇文章主要介紹了解決MySql客戶端秒退問(wèn)題(找不到my.ini),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Mysql實(shí)現(xiàn)遞歸樹(shù)查詢的使用示例
Mysql我們可以使用遞歸查詢來(lái)構(gòu)建一個(gè)遞歸樹(shù),本文就來(lái)介紹一下Mysql實(shí)現(xiàn)遞歸樹(shù)查詢的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
MySQL數(shù)據(jù)庫(kù)連接查詢?join原理
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)連接查詢?join原理,文章首先通過(guò)將多張表連到一起查詢?導(dǎo)致記錄行數(shù)和字段列發(fā)生變化,利用一對(duì)一、一對(duì)多和多對(duì)多關(guān)系保證數(shù)據(jù)完整性展開(kāi)主題內(nèi)容,需要的小伙伴可以參考一下2022-06-06
MySQL生成千萬(wàn)測(cè)試數(shù)據(jù)以及遇到的問(wèn)題
前兩天發(fā)現(xiàn)同事要做一個(gè)對(duì)大表進(jìn)行范圍查詢的功能,所以需要生成千萬(wàn)數(shù)據(jù)進(jìn)行性能測(cè)試,下面這篇文章主要給大家介紹了關(guān)于MySQL生成千萬(wàn)測(cè)試數(shù)據(jù)以及遇到的問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
MySQL下常見(jiàn)的啟動(dòng)失敗與備份失敗問(wèn)題的解決教程
這篇文章主要介紹了MySQL下常見(jiàn)的啟動(dòng)失敗與備份失敗問(wèn)題的解決教程,示例環(huán)境基于Linux系統(tǒng),需要的朋友可以參考下2015-11-11

