MySQL触发器 trigger学习
生活随笔
收集整理的這篇文章主要介紹了
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必須加的
beginsql1...sqlN
end。
#end$$ 查詢已有trigger:show triggers 刪除已有trigger:drop trigger 觸發器名稱 new/old: update觸發:old?代表更新前的記錄。new?代表更新后的記錄. insert觸發:old?不能使用。new?代表插入的記錄. delete觸發:old?代表刪除的記錄。
實例操作: 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、用戶取消訂單后商品庫存訂單的商品數要正常入庫。
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$$
查詢觸發器
刪除觸發器
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$$
查詢觸發器
刪除觸發器
轉載于:https://www.cnblogs.com/cxchanpin/p/6815899.html
總結
以上是生活随笔為你收集整理的MySQL触发器 trigger学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中行随心女人卡额度多少?怎么查询额度?
- 下一篇: linux cmake编译源码,linu