MySQL學習筆記15:觸發器

來源:互聯網
上載者:User

觸發器是由事件來觸發某個操作,這些事件包括INSERT語句,UPDATE語句和DELETE語句

 

建立觸發器建立只有一個執行語句的觸發器
CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件ON 表名 FOR EACH ROW 執行語句

其中,觸發器名參數指要建立的觸發器的名字

BEFORE和AFTER參數指定了觸發執行的時間,在事件之前或是之後

FOR EACH ROW表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器

mysql> CREATE TRIGGER trig1 AFTER INSERT    -> ON work FOR EACH ROW    -> INSERT INTO time VALUES(NOW());Query OK, 0 rows affected (0.09 sec)

上面建立了一個名為trig1的觸發器,一旦在work中有插入動作,就會自動往time表裡插入目前時間

 

建立有多個執行語句的觸發器
CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件ON 表名 FOR EACH ROWBEGIN    執行語句列表END

其中,BEGIN與END之間的執行語句列表參數表示需要執行的多個語句,不同語句用分號隔開

tips:一般情況下,mysql預設是以 ; 作為結束執行語句,與觸發器中需要的分行起衝突

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

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

mysql> DELIMITER ||mysql> CREATE TRIGGER trig2 BEFORE DELETE    -> ON work FOR EACH ROW    -> BEGIN    -> INSERT INTO time VALUES(NOW());    -> INSERT INTO time VALUES(NOW());    -> END    -> ||Query OK, 0 rows affected (0.06 sec)mysql> DELIMITER ;

上面的語句中,開頭將結束符號定義為||,中間定義一個觸發器,一旦有滿足條件的刪除操作

就會執行BEGIN和END中的語句,接著使用||結束

最後使用DELIMITER ; 將結束符號還原

 

查看觸發器SHOW TRIGGERS語句查看觸發器資訊
mysql> SHOW TRIGGERS\G;*************************** 1. row ***************************             Trigger: trig1               Event: INSERT               Table: work           Statement: INSERT INTO time VALUES(NOW())              Timing: AFTER             Created: NULL            sql_mode:              Definer: root@localhostcharacter_set_client: utf8collation_connection: utf8_general_ci  Database Collation: latin1_swedish_ci

結果會顯示所有觸發器的基本資料

tips:SHOW TRIGGERS語句無法查詢指定的觸發器

 

在triggers表中查看觸發器資訊
mysql> SELECT * FROM information_schema.triggers\G*************************** 1. row ***************************           TRIGGER_CATALOG: def            TRIGGER_SCHEMA: person              TRIGGER_NAME: trig1        EVENT_MANIPULATION: INSERT      EVENT_OBJECT_CATALOG: def       EVENT_OBJECT_SCHEMA: person        EVENT_OBJECT_TABLE: work              ACTION_ORDER: 0          ACTION_CONDITION: NULL          ACTION_STATEMENT: INSERT INTO time VALUES(NOW())

結果顯示了所有觸發器的詳細資料,同時,該方法可以查詢制定觸發器的詳細資料

mysql> SELECT * FROM information_schema.triggers WHERE TRIGGER_NAME='trig1'\G*************************** 1. row ***************************           TRIGGER_CATALOG: def            TRIGGER_SCHEMA: person              TRIGGER_NAME: trig1        EVENT_MANIPULATION: INSERT      EVENT_OBJECT_CATALOG: def       EVENT_OBJECT_SCHEMA: person        EVENT_OBJECT_TABLE: work

tips:所有觸發器資訊都儲存在information_schema資料庫下的triggers表中

     可以使用SELECT語句查詢,如果觸發器資訊過多,最好通過TRIGGER_NAME欄位指定查詢

 

刪除觸發器
mysql> DROP TRIGGER trig1;Query OK, 0 rows affected (0.04 sec)

刪除觸發器之後最好使用上面的方法查看一遍

同時,也可以使用database.trig來指定某個資料庫中的觸發器

tips:如果不需要某個觸發器時一定要將這個觸發器刪除,以免造成意外操作

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.