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