亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么創建MySQL的TRIGGER觸發器

發布時間:2021-11-08 11:22:21 來源:億速云 閱讀:286 作者:iii 欄目:MySQL數據庫

這篇文章主要講解了“怎么創建MySQL的TRIGGER觸發器”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么創建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觸發器這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新绛县| 永寿县| 临邑县| 孟连| 建瓯市| 汝城县| 尼玛县| 定西市| 曲水县| 新丰县| 大丰市| 克什克腾旗| 广西| 唐海县| 宜宾县| 汉寿县| 浮山县| 特克斯县| 凤庆县| 安福县| 华池县| 龙岩市| 赤壁市| 宣化县| 汕头市| 上林县| 洛扎县| 穆棱市| 永丰县| 嘉鱼县| 桓台县| 福建省| 武汉市| 黄冈市| 威远县| 晋中市| 奇台县| 万盛区| 黎平县| 邹平县| 辛集市|