數據庫——觸發器

1:定義

    是一種特殊的存儲過程。一般的存儲過程是通過存儲過程名直接調用,而觸發器主要是通過事件(增、刪、改)進行觸發而被執行的。其在表中數據發生變化時自動強制執行。常見的觸發器有兩種:after(for)、instead of,用於insert、update、delete事件。

  after(for) 表示執行代碼後,執行觸發器
  instead of 表示執行代碼前,用已經寫好的觸發器代替你的操作

2:語法

      Create trigger triggerName
        After/before   insert/delete/update  on 表名
        For each row //寫死
        Begin
            Sql語句;( insert/delete/update)
        end
        //After/before(代表觸發的時間) 
        //insert/delete/update(代表監視的事件)
        //表名(表名爲監視的地點)
        //Sql語句;( insert/delete/update)爲觸發事件

如何在觸發器引用行的值
對於insert而言,新增的行用new表示,行中的每一列用new.列表表示
對於delete而言,原本有一行,後被刪除想引用被刪除的這一行,用old表示
對於update而言,被修改的行,修改之前的數據用old來表示,修改之後的用new表示
刪除觸發器 Drop trigger triggername;

代碼分析:
//創建兩個表,orders訂單表,product商品表
mysql> select * from product;
    -> $(該符號表示結束符)
    //delimiter $  告訴MySQL解釋器,當碰到$時,才執行命令.
mysql> select * from product;
    -> $
+----+------+-----+
| id | name | num |
+----+------+-----+
|  1 | 牛   |  57 |
|  2 | 羊   |  80 |
|  3 | 豬   |  80 |
+----+------+-----+

此時訂單表數據爲空

往訂單加入數據
mysql> insert into orders(gid,much) values(2,10);
insert into orders(gid,much) values(3,5);
    -> $
Query OK, 1 row affected

Query OK, 1 row affected
(訂單拿走羊10只,豬5個,所以最後在商品表裏面樣的數量由80變爲70,豬的數量由80變爲75)
mysql> select * from product;
    -> $
+----+------+-----+
| id | name | num |
+----+------+-----+
|  1 | 牛   |  57 |
|  2 | 羊   |  70 |
|  3 | 豬   |  75 |
+----+------+-----+
3 rows in set
mysql> select * from orders;
    -> $
+-----+-----+------+
| oid | gid | much |
+-----+-----+------+
|   4 |   2 |   10 |
|   5 |   3 |    5 |
+-----+-----+------+
2 rows in set

建立觸發器

mysql> create trigger tg2
 after delete on orders
for each row
begin 
    update product set num=num+old.much where id=old.id;
end$
Query OK, 0 rows affected

刪除數據觸動
mysql> delete from orders where id=3;
    -> $
Query OK, 1 row affected

mysql> select * from orders;
    -> $
+-----+-----+------+
| oid | gid | much |
+-----+-----+------+
|   4 |   2 |   10 |
+-----+-----+------+
1 row in set

顯示觸發器的結果
mysql> select * from product;
    -> $
+----+------+-----+
| id | name | num |
+----+------+-----+
|  1 | 牛   |  57 |
|  2 | 羊   |  70 |
|  3 | 豬   |  80 |
+----+------+-----+
3 rows in set
發佈了37 篇原創文章 · 獲贊 3 · 訪問量 6764
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章