日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL触发器 trigger学习

發布時間:2023/12/13 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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?代表刪除的記錄。

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学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。