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表示任何一條記錄上的操作滿(mǎn)足觸發(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ā)器,一旦有滿(mǎn)足條件的刪除操作
就會(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ú)法查詢(xún)指定的觸發(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í),該方法可以查詢(xún)制定觸發(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ǔ)句查詢(xún),如果觸發(fā)器信息過(guò)多,最好通過(guò)TRIGGER_NAME字段指定查詢(xún)
刪除觸發(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導(dǎo)入sql文件命令和mysql遠(yuǎn)程登陸使用詳解
這篇文章主要介紹了mysql導(dǎo)入sql文件命令和mysql遠(yuǎn)程登陸使用詳解,需要的朋友可以參考下2014-04-04
MySQL中的FIND_IN_SET函數(shù)的使用場(chǎng)景
MySQL 中的?FIND_IN_SET()?函數(shù)用于在一個(gè)逗號(hào)分隔的字符串列表中查找指定的值,并返回其在列表中的位置,下面就來(lái)介紹一下FIND_IN_SET函數(shù)的具體使用,感興趣的可以了解一下2024-05-05
MySQL在右表數(shù)據(jù)不唯一的情況下使用left join的方法
這篇文章主要介紹了MySQL在右表數(shù)據(jù)不唯一的情況下使用left join的方法,針對(duì)右表符合條件表達(dá)式的記錄數(shù)大于1條時(shí)left join所顯示的結(jié)果需求來(lái)講,需要的朋友可以參考下2016-03-03
MySQL數(shù)據(jù)庫(kù)算術(shù)運(yùn)算舉例詳解
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)算術(shù)運(yùn)算的相關(guān)資料,MySQL支持的算術(shù)運(yùn)算符包括加、減、乘、除和模運(yùn)算,它們是最常使用、最簡(jiǎn)單的一類(lèi)運(yùn)算符,需要的朋友可以參考下2024-01-01
MySQL慢查詢(xún)?nèi)罩局械腖ock_time由來(lái)解析
這篇文章主要為大家介紹了慢查詢(xún)?nèi)罩局蠰ock_time的由來(lái)解析,以及Lock_time?包含哪些鎖等待時(shí)間、以及是怎么計(jì)算得到的,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-06-06
MySQL中使用group by 是總是出現(xiàn)1055的錯(cuò)誤(推薦)
這篇文章主要介紹了MySQL中使用group by 是總是出現(xiàn)1055的錯(cuò)誤,小編通過(guò)查閱相關(guān)資料才把問(wèn)題解決,今天小編記錄下分享到腳本之家平臺(tái),需要的朋友可以參考下2020-02-02

