MySql創建觸發器


DELIMITER ||

 

CREATE TRIGGER

  觸發器名

  BEFORE (AFTER) 

  觸發事件

ON

  表名

FOR EACH ROW 

BEGIN

  執行語句列表

END

 

DELIMITER ;

一般情況下,mysql默認是以 ; 作為結束執行語句,與觸發器中需要的分行起沖突

     為解決此問題可用DELIMITER,如:DELIMITER ||,可以將結束符號變成||

     當觸發器創建完成后,可以用DELIMITER ;來將結束符號變成;

例如:

NEW.columnname:新增行的某列數據

OLD.columnname:刪除行的某列數據

 
        

查看觸發器:

SHOW TRIGGERS;#語句查看所有觸發器信息

 

SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='觸發器名';#按觸發器名稱查看指定觸發器

刪除觸發器

drop trigger  觸發器名;#刪除觸發器

限制和注意事項

觸發器會有以下兩種限制:

1.觸發程序不能調用將數據返回客戶端的存儲程序,也不能使用采用CALL語句的動態SQL語句,但是允許存儲程序通過參數將數據返回觸發程序,也就是存儲過程或者函數通過OUT或者INOUT類型的參數將數據返回觸發器是可以的,但是不能調用直接返回數據的過程。

2.不能再觸發器中使用以顯示或隱式方式開始或結束事務的語句,如START TRANS-ACTION,COMMIT或ROLLBACK。

注意事項:MySQL的觸發器是按照BEFORE觸發器、行操作、AFTER觸發器的順序執行的,其中任何一步發生錯誤都不會繼續執行剩下的操作,如果對事務表進行的操作,如果出現錯誤,那么將會被回滾,如果是對非事務表進行操作,那么就無法回滾了,數據可能會出錯。

 

總結

觸發器是基於行觸發的,所以刪除、新增或者修改操作可能都會激活觸發器,所以不要編寫過於復雜的觸發器,也不要增加過得的觸發器,這樣會對數據的插入、修改或者刪除帶來比較嚴重的影響,同時也會帶來可移植性差的后果,所以在設計觸發器的時候一定要有所考慮。

觸發器是一種特殊的存儲過程,它在插入,刪除或修改特定表中的數據時觸發執行,它比數據庫本身標准的功能有更精細和更復雜的數據控制能力。

數據庫觸發器有以下的作用:

1.安全性。可以基於數據庫的值使用戶具有操作數據庫的某種權利。

  # 可以基於時間限制用戶的操作,例如不允許下班后和節假日修改數據庫數據。

  # 可以基於數據庫中的數據限制用戶的操作,例如不允許股票的價格的升幅一次超過10%。

2.審計。可以跟蹤用戶對數據庫的操作。   

  # 審計用戶操作數據庫的語句。

  # 把用戶對數據庫的更新寫入審計表。

3.實現復雜的數據完整性規則

  # 實現非標准的數據完整性檢查和約束。觸發器可產生比規則更為復雜的限制。與規則不同,觸發器可以引用列或數據庫對象。例如,觸發器可回退任何企圖吃進超過自己保證金的期貨。

  # 提供可變的缺省值。

4.實現復雜的非標准的數據庫相關完整性規則。觸發器可以對數據庫中相關的表進行連環更新。例如,在auths表author_code列上的刪除觸發器可導致相應刪除在其它表中的與之匹配的行。

  # 在修改或刪除時級聯修改或刪除其它表中的與之匹配的行。

  # 在修改或刪除時把其它表中的與之匹配的行設成NULL值。

  # 在修改或刪除時把其它表中的與之匹配的行級聯設成缺省值。

  # 觸發器能夠拒絕或回退那些破壞相關完整性的變化,取消試圖進行數據更新的事務。當插入一個與其主健不匹配的外部鍵時,這種觸發器會起作用。例如,可以在books.author_code 列上生成一個插入觸發器,如果新值與auths.author_code列中的某值不匹配時,插入被回退。

5.同步實時地復制表中的數據。

6.自動計算數據值,如果數據的值達到了一定的要求,則進行特定的處理。例如,如果公司的帳號上的資金低於5萬元則立即給財務人員發送警告數據。

無論從事什么行業,只要做好兩件事就夠了,一個是你的專業、一個是你的人品,專業決定了你的存在,人品決定了你的人脈,剩下的就是堅持,用善良專業和真誠贏取更多的信任。
以上摘自:https://www.cnblogs.com/phpper/p/7587031.html   周伯通的麥田
備份以便需要時查閱


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM