zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Mysql中的触发器简单介绍及使用案例

mysql案例 使用 简单 介绍 触发器
2023-06-13 09:15:14 时间
什么是触发器?

触发器是数据库的一个程序,他是用来监听着数据表的某个行为,一旦数据表的这个行为发生了,马上执行相应的sql语句

触发器的语法结构:

createtrigger触发器的名称触发器事件on监听的表名foreachrow行为发生后执行的sql语句

触发器事件组成:;两部分组成:

触发器事件发生的时间-----是在监听的表的行为afterbefore常用的是after

触发器执行的内容:增删改

创建order表的时候,需要注意,因为order在mysql中是一个关键字排序,为了避免错误的发生,我们可以添加反引号,表明这不是一个关键字

案例研究:

一旦生成订单,对应的库存表要减去相应的数据

(1)建两张表:一个商品goods表一个订单order表
mysql>createtablegoods(goods_idintprimarykeyauto_increment,goods_namevar
char(64),shop_pricedecimal(10,2),goods_numberint)engine=mysiamdefaultcharset
=utf8;

mysql>createtable`order`(goods_idintprimarykeyauto_increment,goods_namev
archar(64),buy_numberint)engine=mysiamdefaultcharset=utf8;

mysql>insertintogoodsvalues(null,"nokiaN85",2000,35),(null,"iphone4S",4500,3
0),(null,"Lnmia",5000,40),(null,"samsung",4200,20);

mysql>select*fromgoods;
+----------+------------+------------+--------------+
|goods_id|goods_name|shop_price|goods_number|
+----------+------------+------------+--------------+
|1|nokiaN85|2000.00|35|
|2|iphone4S|4500.00|30|
|3|Lnmia|5000.00|40|
|4|samsung|4200.00|20|
+----------+------------+------------+--------------+

(2)创建触发器
mysql>createtriggeralter_goods_numberafterinserton`order`foreachrowup
dategoodssetgoods_number=goods_number-5wheregoods_id=1;

mysql>insertinto`order`values(1,"nokiaN85",5);

mysql>select*fromgoods;
+----------+------------+------------+--------------+
|goods_id|goods_name|shop_price|goods_number|
+----------+------------+------------+--------------+
|1|nokiaN85|2000.00|30|
|2|iphone4S|4500.00|30|
|3|Lnmia|5000.00|40|
|4|samsung|4200.00|20|
+----------+------------+------------+--------------+


new的使用mysql>createtriggeralter_goods_numberafterinserton`order`foreachrowup
dategoodssetgoods_number=goods_number-new.buy_numberwheregoods_id=new.goods
_id;

mysql>insertinto`order`values(4,"samsung",5);

old的使用

mysql>createtriggerback_goods_numberafterdeleteon`order`foreachrowupd
ategoodssetgoods_number=goods_number+old.buy_numberwheregoods_id=old.goods_
id;

mysql>deletefrom`order`wheregoods_id=1;

更新(update将之前下的订单撤销,再重新下订单)

mysql>createtriggerupdate_goods_numberafterupdateon`order`foreachrowu
pdategoodssetgoods_number=goods_number+old.buy_number-new.buy_numberwherego
ods_id=new.goods_id;

mysql>update`order`setbuy_number=10;