本文實(shí)例講述了mysql觸發(fā)器簡(jiǎn)介、創(chuàng)建觸發(fā)器及使用限制。分享給大家供大家參考,具體如下:
簡(jiǎn)介
SQL觸發(fā)器是存儲(chǔ)在數(shù)據(jù)庫(kù)目錄中的一組SQL語(yǔ)句。每當(dāng)與表相關(guān)聯(lián)的事件發(fā)生時(shí),即會(huì)執(zhí)行或觸發(fā)SQL觸發(fā)器,例如插入,更新或刪除。SQL觸發(fā)器也可以當(dāng)做是一種特殊類型的存儲(chǔ)過(guò)程。 它是特別的,因?yàn)樗幌裰苯酉翊鎯?chǔ)過(guò)程那樣調(diào)用。 觸發(fā)器和存儲(chǔ)過(guò)程之間的主要區(qū)別在于,當(dāng)對(duì)表執(zhí)行數(shù)據(jù)修改事件時(shí),會(huì)自動(dòng)調(diào)用觸發(fā)器,而存儲(chǔ)過(guò)程必須要明確地調(diào)用。
完事我們來(lái)看下SQL觸發(fā)器的優(yōu)點(diǎn):
再來(lái)看下它的缺點(diǎn):
既然觸發(fā)器都是一種特殊的存儲(chǔ)過(guò)程了,那么我們?cè)谒鼈冎虚g該如何取舍呢?在下只是建議下,如果我們無(wú)法使用存儲(chǔ)過(guò)程完成工作時(shí),可以考慮使用下SQL觸發(fā)器。
創(chuàng)建觸發(fā)器
在MySQL中,觸發(fā)器是一組SQL語(yǔ)句,當(dāng)對(duì)相關(guān)聯(lián)的表上的數(shù)據(jù)進(jìn)行更改時(shí),會(huì)自動(dòng)調(diào)用該語(yǔ)句。 觸發(fā)器可以被定義為在insert,update或delete語(yǔ)句更改數(shù)據(jù)之前或之后調(diào)用。在MySQL5.7.2版本之前,每個(gè)表最多可以定義六個(gè)觸發(fā)器。我們來(lái)看下它們的簡(jiǎn)單介紹:
但是,從MySQL 5.7.2+版本開始,可以為相同的觸發(fā)事件和動(dòng)作時(shí)間定義多個(gè)觸發(fā)器。當(dāng)使用不使用INSERT,DELETE或UPDATE語(yǔ)句更改表中數(shù)據(jù)的語(yǔ)句時(shí),不會(huì)調(diào)用與表關(guān)聯(lián)的觸發(fā)器。 例如,truncate語(yǔ)句刪除表的所有數(shù)據(jù),但不調(diào)用與該表相關(guān)聯(lián)的觸發(fā)器。但是,有些語(yǔ)句使用了后臺(tái)的INSERT語(yǔ)句,如REPLACE語(yǔ)句或LOAD DATA語(yǔ)句。如果使用這些語(yǔ)句,則調(diào)用與表關(guān)聯(lián)的相應(yīng)觸發(fā)器。所以我們必須要為與表相關(guān)聯(lián)的每個(gè)觸發(fā)器使用唯一的名稱??梢詾椴煌谋矶x相同的觸發(fā)器名稱,這是一個(gè)很好的做法。我們來(lái)看下定義觸發(fā)器的語(yǔ)法結(jié)構(gòu):
(BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE)
例如,before_order_update是更新orders表中的行數(shù)據(jù)之前調(diào)用的觸發(fā)器。我們?cè)賮?lái)看一種定義方式:
tablename_(BEFORE | AFTER)_(INSERT| UPDATE | DELETE)
例如,order_before_update與上述before_order_update觸發(fā)器相同。
mysql會(huì)在在數(shù)據(jù)目錄中存儲(chǔ)觸發(fā)器,例如:/data/luyaran/,并使用名為tablename.TRG和triggername.TRN的文件:
所以我們可以通過(guò)將觸發(fā)器文件復(fù)制到備份文件夾來(lái)備份mysql觸發(fā)器,還可以使用mysqldump工具備份觸發(fā)器。
使用限制
mysql觸發(fā)器覆蓋標(biāo)準(zhǔn)SQL中定義的所有功能,但是,在應(yīng)用程序中使用它們也會(huì)有一些限制:
好啦,本次記錄就到這里了。
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》、《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總》
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。
標(biāo)簽:陽(yáng)江 黃石 果洛 來(lái)賓 煙臺(tái) 鞍山 赤峰 河北
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql觸發(fā)器簡(jiǎn)介、創(chuàng)建觸發(fā)器及使用限制分析》,本文關(guān)鍵詞 mysql,觸發(fā)器,簡(jiǎn)介,創(chuàng)建,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。