您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么創建MySQL的TRIGGER觸發器”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么創建MySQL的TRIGGER觸發器”吧!
數據庫觸發器是數據庫中所維護的命名數據庫對象,將在修改表中數據時被激活。使用觸發器可以提高表中數據的功能和安全性級別。可以使用觸發器控制對特定數據的訪問權限、執行特定日志記錄或對數據本身進行審計。
觸發器是在修改表數據時激活的命名數據庫對象。它們可以:
? 在插入或更新數據之前對數據進行檢查并驗證刪除和更新
? 充當數據過濾器,在插入或更新之前修改超出范圍的數據
? 修改INSERT、UPDATE 和DELETE 的行為方式
? 對于不支持外鍵的存儲引擎,模仿外鍵的行為
? 提供日志記錄功能
? 自動創建匯總表
1.1. 創建觸發器
CREATE TRIGGER 語句:
CREATE TRIGGER trigger_name
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON table_name FOR EACH ROW
triggered_statement
示例:
CREATE TRIGGER City_AD AFTER DELETE
ON City FOR EACH ROW
INSERT INTO DeletedCity (ID, Name) VALUES (OLD.ID, OLD.Name);
trigger_name 是為觸發器指定的名稱,而table_name 是要與觸發器關聯的表的名稱。BEFORE 和AFTER 指示激活觸發器的時間(是在觸發事件之前或是之后),而INSERT、UPDATE 或DELETE 指示具體的事件。
注:表名OLD 和NEW 是指觸發器可查看的虛擬表。這些表分別包含UPDATE 或DELETE語句所修改的數據的舊版本,或INSERT 或UPDATE 語句所添加的數據的新版本。
1.2. 觸發器事件
BEFORE 和AFTER
BEFORE 和AFTER 關鍵字是指觸發器的激活時間,相對于數據修改語句(INSERT、UPDATE 或DELETE)將更改寫入底層數據庫的時間。
BEFORE 關鍵字可使觸發器在涉及的數據修改之前執行。可使用BEFORE 觸發器捕獲無效數據條目并在寫入表之前對其進行更正或拒絕。
– BEFORE INSERT:在添加新數據之前觸發
– BEFORE UPDATE:在使用新數據更新(或覆蓋)現有數據之前觸發
– BEFORE DELETE:在刪除數據之前觸發
AFTER 關鍵字定義在數據修改成功后執行的觸發器。可使用AFTER 觸發器記錄或審計數據庫中的數據修改。
– AFTER INSERT:在添加新數據之后觸發
– AFTER UPDATE:在使用新數據更新(或覆蓋)現有數據之后觸發
– AFTER DELETE:在刪除數據之后觸發
1.3. 觸發器錯誤處理
MySQL 按如下方式處理觸發器執行期間發生的錯誤:
? BEFORE 觸發器失敗,則包含相應行操作的事務將回滾。
? AFTER 觸發器執行,AFTER觸發器事件和行操作必須成功執行。
? 對于非事務表,事務不可用。只有觸發了觸發器的語句會回滾。
觸發器失敗后,MySQL 會回滾包含導致觸發器觸發的語句的事務。
對于非事務表,無法完成此類回滾。因此,雖然語句失敗,但在發生錯誤之前執行的所有更改仍然會生效。
1.4. 檢查觸發器
SHOW CREATE TRIGGER trigger_name
此語句返回可用于重新創建指定觸發器的具體字符串。您必須知道觸發器的名稱才能運行此語句;對于SHOW CREATE TRIGGER 語句,不存在LIKE 或WHERE 語法。
SHOW TRIGGERS
此語句為MySQL 擴展。它可返回觸發器的特征,如數據庫、名稱、類型、創建者以及創建和修改日期。此語句有一個優點:可基于LIKE 模式或WHERE 子句中提供的條件來顯示特定觸發器。如果未指定條件,則此語句會顯示所有觸發器的信息。
INFORMATION_SCHEMA.TRIGGERS:
此語句包含SHOW 命令所顯示的所有數據,能夠完整地呈現在所有數據庫中可用的觸發器。
1.5. 刪除觸發器
使用如下語法可顯式刪除觸發器:
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name;
使用DROP TRIGGER trigger_name 時,服務器會在當前模式中查找該觸發器的名稱。如果要刪除其他模式中的觸發器,請包含模式名稱。使用IF EXISTS 可防止因嘗試刪除不存在的觸發器而出現的錯誤。通過刪除針對其定義觸發器的表或者包含觸發器的數據庫,可隱式刪除觸發器;
1.6. 對觸發器的限制
? 不允許使用的語句包括:
l SQL 預處理語句
l 顯示或隱式COMMIT 和ROLLBACK
l 返回結果集的語句,例如,不包含INTO var_list 子句的SELECT 語句
l FLUSH 語句
l 用于修改要應用觸發器的表的語句
l SHOW 語句
? 以下更改不會觸發觸發器:
l 級聯外鍵所導致的更改
l 在基于行的復制過程中導致的更改
請通過使用SELECT ...INTO var_list,或者通過使用游標和FETCH 語句的方法在觸發器中處理結果集。
1.7. 觸發器權限
? 要執行CREATE TRIGGER 和DROP TRIGGER 命令,需要有TRIGGER 權限。
? 在觸發器中使用OLD 和NEW需要的權限:要使用SET NEW.col_name = value 為列賦值,需要對該列擁有UPDATE 權限;要在表達式中使用NEW.col_name 以引用新的列值,需要對該列擁有SELECT 權限。
感謝各位的閱讀,以上就是“怎么創建MySQL的TRIGGER觸發器”的內容了,經過本文的學習后,相信大家對怎么創建MySQL的TRIGGER觸發器這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。