欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql觸發(fā)器簡(jiǎn)介、創(chuàng)建觸發(fā)器及使用限制分析

 更新時(shí)間:2019年12月16日 10:02:59   作者:luyaran  
這篇文章主要介紹了mysql觸發(fā)器簡(jiǎn)介、創(chuàng)建觸發(fā)器及使用限制,結(jié)合實(shí)例形式分析了mysql觸發(fā)器的功能、原理、創(chuàng)建、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(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ǔ)過程。 它是特別的,因?yàn)樗幌裰苯酉翊鎯?chǔ)過程那樣調(diào)用。 觸發(fā)器和存儲(chǔ)過程之間的主要區(qū)別在于,當(dāng)對(duì)表執(zhí)行數(shù)據(jù)修改事件時(shí),會(huì)自動(dòng)調(diào)用觸發(fā)器,而存儲(chǔ)過程必須要明確地調(diào)用。

完事我們來(lái)看下SQL觸發(fā)器的優(yōu)點(diǎn):

  • SQL觸發(fā)器提供了檢查數(shù)據(jù)完整性的替代方法。
  • SQL觸發(fā)器可以捕獲數(shù)據(jù)庫(kù)層中業(yè)務(wù)邏輯中的錯(cuò)誤。
  • SQL觸發(fā)器提供了運(yùn)行計(jì)劃任務(wù)的另一種方法。通過使用SQL觸發(fā)器,您不必等待運(yùn)行計(jì)劃的任務(wù),因?yàn)樵趯?duì)表中的數(shù)據(jù)進(jìn)行更改之前或之后自動(dòng)調(diào)用觸發(fā)器。
  • SQL觸發(fā)器對(duì)于審核表中數(shù)據(jù)的更改非常有用。

再來(lái)看下它的缺點(diǎn):

  • SQL觸發(fā)器只能提供擴(kuò)展驗(yàn)證,并且無(wú)法替換所有驗(yàn)證。一些簡(jiǎn)單的驗(yàn)證必須在應(yīng)用層完成。 例如,您可以使用JavaScript或服務(wù)器端使用服務(wù)器端腳本語(yǔ)言(如JSP,PHP,ASP.NET,Perl等)來(lái)驗(yàn)證客戶端的用戶輸入。
  • 從客戶端應(yīng)用程序調(diào)用和執(zhí)行SQL觸發(fā)器不可見,因此很難弄清數(shù)據(jù)庫(kù)層中發(fā)生的情況。
  • SQL觸發(fā)器可能會(huì)增加數(shù)據(jù)庫(kù)服務(wù)器的開銷。

既然觸發(fā)器都是一種特殊的存儲(chǔ)過程了,那么我們?cè)谒鼈冎虚g該如何取舍呢?在下只是建議下,如果我們無(wú)法使用存儲(chǔ)過程完成工作時(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)單介紹:

  • BEFORE INSERT - 在數(shù)據(jù)插入表之前被激活觸發(fā)器。
  • AFTER INSERT - 在將數(shù)據(jù)插入表之后激活觸發(fā)器。
  • BEFORE UPDATE - 在表中的數(shù)據(jù)更新之前激活觸發(fā)器。
  • AFTER UPDATE - 在表中的數(shù)據(jù)更新之后激活觸發(fā)器。
  • BEFORE DELETE - 在從表中刪除數(shù)據(jù)之前激活觸發(fā)器。
  • AFTER DELETE - 從表中刪除數(shù)據(jù)之后激活觸發(fā)器。

但是,從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ā)器使用唯一的名稱。可以為不同的表定義相同的觸發(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的文件:

  • tablename.TRG文件將觸發(fā)器映射到相應(yīng)的表。
  • triggername.TRN文件包含觸發(fā)器定義。

所以我們可以通過將觸發(fā)器文件復(fù)制到備份文件夾來(lái)備份mysql觸發(fā)器,還可以使用mysqldump工具備份觸發(fā)器。

使用限制

mysql觸發(fā)器覆蓋標(biāo)準(zhǔn)SQL中定義的所有功能,但是,在應(yīng)用程序中使用它們也會(huì)有一些限制:

  • 使用在SHOW,LOAD DATA,LOAD TABLE,BACKUP DATABASE,RESTORE,F(xiàn)LUSH和RETURN語(yǔ)句之上。
  • 使用隱式或明確提交或回滾的語(yǔ)句,如COMMIT,ROLLBACK,START TRANSACTION,LOCK/UNLOCK TABLES,ALTER,CREATE,DROP,RENAME等。
  • 使用準(zhǔn)備語(yǔ)句,如PREPARE,EXECUTE等
  • 使用動(dòng)態(tài)SQL語(yǔ)句。

好啦,本次記錄就到這里了。

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過程技巧大全》、《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。

相關(guān)文章

  • 深度分析mysql GROUP BY 與 ORDER BY

    深度分析mysql GROUP BY 與 ORDER BY

    鑒于項(xiàng)目的需要,就從網(wǎng)上找到該文章,文章分析得很詳細(xì)也很易懂,在android里,(不知道是不是現(xiàn)在水平的限制,總之我還沒找到在用ContentProvider時(shí)可以使用子查詢),主要方法是用SQLiteDatabase 的 rawQuery,直接運(yùn)行sql語(yǔ)句就可以了。
    2014-06-06
  • mysql時(shí)區(qū)查看與設(shè)置方法

    mysql時(shí)區(qū)查看與設(shè)置方法

    這篇文章主要介紹了mysql時(shí)區(qū)查看與設(shè)置方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • MySQL操作之JSON數(shù)據(jù)類型操作詳解

    MySQL操作之JSON數(shù)據(jù)類型操作詳解

    這篇文章主要介紹了MySQL操作之JSON數(shù)據(jù)類型操作詳解,內(nèi)容較為詳細(xì),具有收藏價(jià)值,需要的朋友可以參考。
    2017-10-10
  • MySQL中Decimal類型和Float Double的區(qū)別(詳解)

    MySQL中Decimal類型和Float Double的區(qū)別(詳解)

    下面小編就為大家?guī)?lái)一篇MySQL中Decimal類型和Float Double的區(qū)別(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-03-03
  • MYSQL使用.frm恢復(fù)數(shù)據(jù)表結(jié)構(gòu)的實(shí)現(xiàn)方法

    MYSQL使用.frm恢復(fù)數(shù)據(jù)表結(jié)構(gòu)的實(shí)現(xiàn)方法

    在這里我們探討使用.frm文件恢復(fù)數(shù)據(jù)表機(jī)構(gòu)(當(dāng)然如果你以前備份過數(shù)據(jù)表,你可以使用調(diào)用備份的數(shù)據(jù)表)
    2010-02-02
  • MySQL按照漢字的拼音排序簡(jiǎn)單實(shí)例

    MySQL按照漢字的拼音排序簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇MySQL按照漢字的拼音排序簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-01-01
  • Mysql從5.6.14安全升級(jí)至mysql5.6.25的方法

    Mysql從5.6.14安全升級(jí)至mysql5.6.25的方法

    這篇文章主要介紹了Mysql從5.6.14安全升級(jí)至mysql5.6.25的方法,本教程講的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2016-08-08
  • MySQL中slave_exec_mode參數(shù)詳解

    MySQL中slave_exec_mode參數(shù)詳解

    本篇文章主要給大家講述了MySQL中slave_exec_mode參數(shù)的用法以及示例分析了出現(xiàn)的錯(cuò)誤問題和解決辦法,需要的朋友參考學(xué)習(xí)下吧。
    2017-12-12
  • mysql 索引合并的使用

    mysql 索引合并的使用

    索引合并是mysql底層為我們提供的智能算法。本文就介紹了mysql 索引合并的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • MySQL數(shù)據(jù)庫(kù)開啟、關(guān)閉、查看函數(shù)功能的方法

    MySQL數(shù)據(jù)庫(kù)開啟、關(guān)閉、查看函數(shù)功能的方法

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)開啟、關(guān)閉、查看函數(shù)功能的方法,本文為解決一個(gè)錯(cuò)誤總結(jié)而來(lái),錯(cuò)誤信息本文一同給出,需要的朋友可以參考下
    2014-10-10

最新評(píng)論