MySQL触发器 trigger学习
生活随笔
收集整理的這篇文章主要介紹了
MySQL触发器 trigger学习
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
觸發(fā)器:一類特殊的事物。可監(jiān)視某種數(shù)據(jù)操作,并觸發(fā)相關(guān)操作(insert/update/delete)。表中的某些數(shù)據(jù)改變,希望同一時候能夠引起其他相關(guān)數(shù)據(jù)改變的需求。 作用:變化自己主動完畢某些語句查詢,加入程序的靈活性。 創(chuàng)建觸發(fā)器語法: #delimiter $$ ?//默認(rèn)情況下。delimiter是分號“;”,sql語句帶有;號結(jié)尾會報錯,沒到end就算到結(jié)束了,使用delimiter $$作用就是告訴mysql語句的結(jié)尾換成以$結(jié)束,對應(yīng)使用end$$結(jié)束 create trigger test1 #觸發(fā)器名稱
(after/before) #觸發(fā)時間
(insert/update/delete) #監(jiān)視事件
on table #監(jiān)視地點(diǎn)(表名)
for each row #mysql必須加的
beginsql1...sqlN
end。
#end$$ 查詢已有trigger:show triggers 刪除已有trigger:drop trigger 觸發(fā)器名稱 new/old: update觸發(fā):old?代表更新前的記錄。new?代表更新后的記錄. insert觸發(fā):old?不能使用。new?代表插入的記錄. delete觸發(fā):old?代表刪除的記錄。
實(shí)例操作: 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表中的庫存對應(yīng)降低訂單的數(shù)量。 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)
#創(chuàng)建觸發(fā)器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、用戶取消訂單后商品庫存訂單的商品數(shù)要正常入庫。
3、用戶更新訂單的時候。商品庫存要依據(jù)訂單的數(shù)量正常更新。 #觸發(fā)器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$$
查詢觸發(fā)器
刪除觸發(fā)器
new?不能使用.
實(shí)例操作: 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表中的庫存對應(yīng)降低訂單的數(shù)量。 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)
#創(chuàng)建觸發(fā)器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、用戶取消訂單后商品庫存訂單的商品數(shù)要正常入庫。
下面僅僅寫觸發(fā)器trigger,操作過程不寫太多比較亂。
#觸發(fā)器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、用戶更新訂單的時候。商品庫存要依據(jù)訂單的數(shù)量正常更新。 #觸發(fā)器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$$
查詢觸發(fā)器
刪除觸發(fā)器
轉(zhuǎn)載于:https://www.cnblogs.com/cxchanpin/p/6815899.html
總結(jié)
以上是生活随笔為你收集整理的MySQL触发器 trigger学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中行随心女人卡额度多少?怎么查询额度?
- 下一篇: 中行随心女人卡年费多少?免年费吗?