資料庫基礎<四>觸發器

來源:互聯網
上載者:User

1、概念

       觸發器(Trigger)是使用者定義在關係表上的一類由事件驅動的特殊過程,一旦定義,任何使用者

對錶的增、刪、改操作均由伺服器自動啟用相應的觸發器,在DBMS核心層進行集中的完整性控制。


2、定義觸發器

      create trigger <觸發器名>  before|after <觸發事件> on <表名>

  for each row|statement  [when <觸發條件>] <觸發動作體>

 

     觸發事件:可以是 insert、delete 或 update ,可以是幾個事件的組合,用or串連

                         update 後面還可以有 of<觸發列,...> 

     觸發器類型:分為 for each row(行級觸發器)和 for each statement(語句級觸發器,觸發一次)

     觸發動作體:可以是一個過程塊或是對已建立預存程序的調用,如果是行級觸發器,可以在過程體中

使用 new 和 old 引用 update/insert 事件之後的新值和 update/delete 事件之前的舊值


3、啟用觸發器

       同一個表上的多個觸發器啟用時的執行順序:

        1)執行該表上的 before 觸發器 

        2)啟用觸發器的 SQL 陳述式

        3)執行該表上的 after 觸發器

       查看觸發器是否被啟用:show triggers

 

4、刪除觸發器

      drop trigger <觸發器名> on  <表名>


5、mysql 觸發器執行個體

CREATE TABLE test1(a1 INT);CREATE TABLE test2(a2 INT);CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);CREATE TABLE test4(  a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,   b4 INT DEFAULT 0); DELIMITER |    /* 改變輸入結束符 */ CREATE TRIGGER testref BEFORE INSERT ON test1  FOR EACH ROW BEGIN    INSERT INTO test2 SET a2 = NEW.a1;    DELETE FROM test3 WHERE a3 = NEW.a1;      UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;  END| DELIMITER ; INSERT INTO test3 (a3) VALUES   (NULL), (NULL), (NULL), (NULL), (NULL),   (NULL), (NULL), (NULL), (NULL), (NULL); INSERT INTO test4 (a4) VALUES   (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);如果將下述值插入表test1,如下所示:mysql> INSERT INTO test1 VALUES     -> (1), (3), (1), (7), (1), (8), (4), (4);Query OK, 8 rows affected (0.01 sec)Records: 8  Duplicates: 0  Warnings: 0那麼4個表中的資料如下:mysql> SELECT * FROM test1;+------+| a1   |+------+|    1 ||    3 ||    1 ||    7 ||    1 ||    8 ||    4 ||    4 |+------+8 rows in set (0.00 sec) mysql> SELECT * FROM test2;+------+| a2   |+------+|    1 ||    3 ||    1 ||    7 ||    1 ||    8 ||    4 ||    4 |+------+8 rows in set (0.00 sec) mysql> SELECT * FROM test3;+----+| a3 |+----+|  2 ||  5 ||  6 ||  9 || 10 |+----+5 rows in set (0.00 sec) mysql> SELECT * FROM test4;+----+------+| a4 | b4   |+----+------+|  1 |    3 ||  2 |    0 ||  3 |    1 ||  4 |    2 ||  5 |    0 ||  6 |    0 ||  7 |    1 ||  8 |    1 ||  9 |    0 || 10 |    0 |+----+------+10 rows in set (0.00 sec)


相關文章

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.