程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL筆記之觸發器的運用

MySQL筆記之觸發器的運用

編輯:MySQL綜合教程

MySQL筆記之觸發器的運用。本站提示廣大學習愛好者:(MySQL筆記之觸發器的運用)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL筆記之觸發器的運用正文


創立觸發器

創立只要一個履行語句的觸發器

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 ROW
BEGIN
    履行語句列表
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@localhost
character_set_client: utf8
collation_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:假如不須要某個觸發器時必定要將這個觸發器刪除,以避免形成不測操作

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved