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

MySQL觸發器trigger學習

編輯:MySQL綜合教程

MySQL觸發器trigger學習


觸發器:一類特殊的事物,可監視某種數據操作,並觸發相關操作(insert/update/delete);表中的某些數據改變,希望同時可以引起其它相關數據改變的需求。 作用:變化自動完成某些語句查詢,添加程序的靈活性。 創建觸發器語法: #delimiter $$ //默認情況下,delimiter是分號“;”,sql語句帶有;號結尾會報錯,沒到end就算到結束了,使用delimiter $$作用就是告訴mysql語句的結尾換成以$結束,相應使用end$$結束
create trigger test1  #觸發器名稱
(after/before) #觸發時間
(insert/update/delete)  #監視事件
on table #監視地點(表名)
for each row  #mysql必須加的 
begin
    sql1
    ...
    sqlN
end;
#end$$
查詢已有trigger:show triggers 刪除已有trigger:drop trigger 觸發器名稱 new/old: update觸發:old 代表更新前的記錄。new 代表更新後的記錄. insert觸發:old 不能使用。new 代表插入的記錄. delete觸發:old 代表刪除的記錄。new 不能使用.
實例操作: goods商品表和ord訂單表
CREATE TABLE goods(
`goods_id` INT(10),
`name` VARCHAR(20),
`num` SMALLINT(4)
)ENGINE=INNODB CHARSET=utf8
CREATE TABLE `ord`(
`oid` INT(10),
`gid` INT(10),
`much` INT(10)
)ENGINE=INNODB CHARSET=utf8
INSERT INTO goods VALUES
(1, 'cat', 26),(2, 'dog', 26),(3, 'pig', 26);
1、要求每下一個訂單,goods表中的庫存相應減少訂單的數量。 mysql> select * from goods +----------+------+------+ | goods_id | name | num | +----------+------+------+ | 1 | cat | 26 | | 2 | dog | 26 | | 3 | pig | 26 | +----------+------+------+ 3 rows in set (0.00 sec) mysql> select * from ord; Empty set (0.00 sec)
#創建觸發器test1
DELIMITER $$
CREATE TRIGGER test1
AFTER
INSERT
ON `ord`
FOR EACH ROW
BEGIN
UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;
END$$

mysql> CREATE TRIGGER test1 -> AFTER -> INSERT -> ON `ord` -> FOR EACH ROW -> BEGIN -> UPDATE goods SET num= num - new.much WHERE goods_id = new.gid; -> END$$ Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO `ord` VALUES (1, 2, 2)$$ Query OK, 1 row affected (0.03 sec) mysql> select * from ord$$ +------+------+------+ | oid | gid | much | +------+------+------+ | 1 | 2 | 2 | +------+------+------+ 1 row in set (0.00 sec) mysql> select * from goods$$ +----------+------+------+ | goods_id | name | num | +----------+------+------+ | 1 | cat | 26 | | 2 | dog | 24 | | 3 | pig | 26 | +----------+------+------+ 3 rows in set (0.00 sec) goods表裡面的dog由26變成24
2、用戶取消訂單後商品庫存訂單的商品數要正常入庫。以下只寫觸發器trigger,操作過程不寫太多比較亂。
#觸發器test2
CREATE TRIGGER test2
AFTER
DELETE
ON `ord`
FOR EACH ROW
BEGIN
UPDATE goods SET num = num + old.much WHERE goods_id = old.gid;
END $$ 
\
3、用戶更新訂單的時候,商品庫存要根據訂單的數量正常更新。
#觸發器test3
CREATE TRIGGER test3
AFTER
UPDATE
ON `ord`
FOR EACH ROW
BEGIN
UPDATE goods SET num = num + old.much - new.much WHERE goods_id = new.gid;
END$$
\

查詢觸發器 \
刪除觸發器


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