原文地址:https://dwz.cn/yCYkG78b
作者:best.lei
觸發器和存儲過程一樣,都是嵌入到MySQL的一段程序。不同的是,執行存儲過程需要使用CALL語句來調用,而觸發器是由事件觸發某些操作,這些事件包括INSERT、UPDATE、DELETE。一旦定義了觸發程序,當數據庫執行這些語句時,就會激發觸發器執行相應的操作。本片博客將通過實例介紹觸發器的定義、創建、查看以及刪除。
- 創建觸發器
觸發器可以查詢其他表,而且可以包含復雜的SQL語句,用于滿足復雜的業務規則或要求。但在觸發器中不能對被觸發表進行操作。如下是觸發器的創建語法:
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_statement
其中trigger_name表示觸發器名稱;trigger_time表示觸發器時機,可以指定為BEFORE或AFTER;trigger_event標識觸發事件,包括INSERT、UPDATE和DELETE;tb_name標識在哪張表上建立觸發器;trigger_statement是觸發程序體。觸發程序可以使用BEGIN和END作為開始和結束,中間包含多條語句。
我們在以往的學生成績表上創建一個觸發器,該觸發器記錄最新插入的數據信息,代碼執行如下:
創建觸發器:CREATE TRIGGER p_in AFTER INSERT ON tb_score FOR EACH ROW BEGIN SET @info=CONCAT('studentID=', NEW.sID, ', classID=', NEW.cID, ', grade=', NEW.grade); END // 向tb_score表中插入值:INSERT INTO tb_score VALUE(3,1,88); 查看變量@info的值:SELECT @info;
- 查看觸發器
查看觸發器是指查看數據庫中已經存在的觸發器的定義、狀態和語法信息等。本節將介紹兩種查看觸發器的方法,分別是SHOW TRIGGERS和在triggers表中查看觸發器信息。
1.SHOW TRIGGERS語句查看觸發器信息,語法格式為:SHOW TRIGGERSG;
2..當觸發器較少時,可以通過SHOW TRIGGERS查看。如果觸發器很多,且需要查看特定觸發器的信息,則通過在information_schema數據庫中的triggers表中查找更方便。具體語法格式如下:
SELECT * FROM information_schema.trigger WHERE condition; 不指定condition則默認查詢所有的觸發器。 如查看指定名稱的觸發器的詳細信息:SELECT * FROM information_schema.triggers WHERE trigger_name='p_in'G;
如上執行結果顯示:TRIGGER_SCHEMA表示觸發器所在的數據庫;TRIGGER_NAME表示觸發器的名稱;EVENT_OBJECT_TABLE表示在哪個數據表上觸發;ACTION_STATEMENT表示觸發器觸發時執行的具體操作;ACTION_ORIENTATION表示在每條記錄上都觸發;ACTION_TIMING表示觸發的時刻是AFTER。
- 刪除觸發器
使用DROP TRIGGER語句刪除MySQL中已經存在的觸發器,基本語句格式為:DROP TRIGGER [schema_name.]trigger_name;
如想刪除創建的p_in觸發器,只需執行:DROP TRIGGER test.p_in;
- 注意事項
在使用觸發器時,對于一張表的相同事件只能創建一個觸發器。如對表tb_score的BEFORE INSERT事件只能創建一個觸發器。及時刪除不需要的觸發器。