mysql触发器预约实例_Mysql触发器实例分析
所謂觸發(fā)器,就是在定義在表對象上。當(dāng)觸發(fā)器所在的表出現(xiàn)指定的事件時(shí),會觸發(fā)對應(yīng)表的delete update insert的操作。說的有點(diǎn)繞口,其實(shí)就是到監(jiān)視某種情況,然后去觸發(fā)某種操作。
觸發(fā)器是如何來進(jìn)行定義的呢?
在定義時(shí)要注意四個(gè)基本的語法要素:
1 1.監(jiān)視地點(diǎn)(某張table)2 2.監(jiān)視事件(insert/update/delete)3 3.觸發(fā)時(shí)間(觸發(fā)時(shí)的時(shí)機(jī)after/before,在事件執(zhí)行之后或者在事件執(zhí)行之前)
4.觸發(fā)事件(insert/update/delete)4
5 具體語法:6 create trigger triggerName7 after/before insert/update/delete on 表名8 for each row #這句話在mysql是固定的9 begin10 sql語句;11 end;
實(shí)例的數(shù)據(jù)庫表的結(jié)構(gòu)如下:
1 SET FOREIGN_KEY_CHECKS=0;2
3 -- ----------------------------
4 -- Table structure fortb_goods5 -- ----------------------------
6 DROP TABLE IF EXISTS `tb_goods`;7 CREATE TABLE `tb_goods` (8 `g_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品ID',9 `goodname` varchar(20) DEFAULT NULL COMMENT '商品名稱',10 `goodcount` int(11) DEFAULT NULL COMMENT '商品數(shù)目',11 PRIMARY KEY (`g_id`)12 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;13
14
15 SET FOREIGN_KEY_CHECKS=0;16 -- ----------------------------
17 -- Table structure fortb_orders18 -- ----------------------------
19 DROP TABLE IF EXISTS `tb_orders`;20 CREATE TABLE `tb_orders` (21 `o_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '訂單ID',22 `g_id` int(11) DEFAULT NULL COMMENT '商品ID',23 `ordercount` int(11) DEFAULT NULL COMMENT '訂購數(shù)目',24 PRIMARY KEY (`o_id`)25 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
解決如下幾個(gè)問題:
(1)當(dāng)我們向訂單表中插入數(shù)據(jù)時(shí),會將對應(yīng)的商品的數(shù)目減少對應(yīng)的數(shù)量,而不用手動去更新商品的數(shù)目。
初始的商品的數(shù)目:
1 insert into tb_orders(g_id,ordercount) values(1,2)2 #向訂單表中給商品編號為1的插入一條記錄,則對應(yīng)的商品ID為1的數(shù)目減23 #商品的數(shù)目
(2)當(dāng)我們刪除訂單表中數(shù)據(jù)時(shí),會將對應(yīng)的商品的數(shù)目恢復(fù)到對應(yīng)的數(shù)量。
delete from tb_orders where g_id = 1 #刪除訂單表中 商品編號為1的訂單 則觸發(fā)商品ID為2的商品數(shù)目恢復(fù)原來
(3)更新訂單信息,則修改對應(yīng)的商品的數(shù)目的信息
對應(yīng)的觸發(fā)器:
數(shù)據(jù)庫中數(shù)據(jù)變化:
update tb_orders set ordercount =?2?where g_id =?1??#更新訂單表中商品id為1的訂單的數(shù)目 則觸發(fā)商品表中數(shù)目變化
總結(jié)
以上是生活随笔為你收集整理的mysql触发器预约实例_Mysql触发器实例分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 添加程序图标到我的电脑
- 下一篇: pyqt5——QImage与QPixma