MySQL筆記之觸發(fā)器的應(yīng)用_MySQL教程
推薦:MySQL筆記之視圖的使用詳解使用視圖的大部分情況是為了保障數(shù)據(jù)安全性,提高查詢效率
創(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筆記之字符串函數(shù)的應(yīng)用字符串操作在程序設(shè)計(jì)中是非常重要的組成部分,而MySQL數(shù)據(jù)庫(kù)中的字符串操作卻相當(dāng)簡(jiǎn)單
- MSSQL清空日志刪除日志文件
- 關(guān)于數(shù)據(jù)庫(kù)中保留小數(shù)位的問(wèn)題
- 解析mysql與Oracle update的區(qū)別
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)以及函數(shù)、存儲(chǔ)過(guò)程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現(xiàn)Can''t create/write to file ''#sql_5c0_0.MYD''的問(wèn)題
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
- 淺析一個(gè)MYSQL語(yǔ)法(在查詢中使用count)的兼容性問(wèn)題
- 解析MySQL中INSERT INTO SELECT的使用
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
猜你也喜歡看這些
- SQL普通表轉(zhuǎn)分區(qū)表的方法
- SQL Server和Oracle的真正區(qū)別
- 如何在SQL Server2005中還原數(shù)據(jù)庫(kù)
- 解讀SQL和Oracle對(duì)數(shù)據(jù)庫(kù)事務(wù)處理的差異
- sql2005 日志清理 SQL2005壓縮清除日志的方法
- 解讀SQL Server與Oracle數(shù)據(jù)庫(kù)在安全性上的異同
- 刪除SQL Server日志的方法
- 談SQL Server 2005最后升級(jí):SP3年底發(fā)布
- SQL Server中, DateTime (日期)型操作的 SQL語(yǔ)法
- 談SQL Server講堂:備份和恢復(fù)措施
- 相關(guān)鏈接:
- 教程說(shuō)明:
MySQL教程-MySQL筆記之觸發(fā)器的應(yīng)用
。