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;
触发器是数据库的一个程序,他是用来监听着数据表的某个行为,一旦数据表的这个行为发生了,马上执行相应的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;
相关文章
- mysql分区表_MySQL分区表的正确使用方法
- MySQL数据库迁移:简单、快捷的工具使用(mysql数据库迁移工具)
- 库深入了解MySQL:如何查看数据库(怎么看mysql数据)
- MySQL 5.6新特性日志分析(mysql5.6log)
- MySQL编程完全指南:从入门到精通。(mysql编程教程)
- MySQL中默认日期格式的探索(mysql默认日期格式)
- 灾备MySQL多机房灾备方案:安全保障你的数据(mysql多机房)
- Word导入MySQL:简单快捷的方式(word导入mysql)
- 累计MySQL 累计使用时长:计算至今天的每一天(mysql天数)
- MySQL 安装指南:简单易懂的中文版。(mysql安装中文)
- MySQL中avg函数的简单应用指南(mysql中avg的使用)
- 掌握MySQL如何查找编辑1条数据(mysql中1条数据)
- MySQL数据库性能优化的两个阶段体检方法(mysql两阶段体检)
- MySQL搭配3Proxy实现稳定网络连接(3proxy mysql)
- MySQL中如何使用列求和函数(mysql中列求和函数)
- MySQL全表模糊查询技巧详解(mysql中全表模糊查询)
- MySQL与PHP如何使用PN库进行高效数据处理(mysql_pn)
- 如何实现MySQL数据库的同步备份(mysql两数据库同步)
- MySQL中如何使用下拉框字段(mysql下拉框字段)
- MySQL云端化让数据管理更高效灵活安全(mysql上云的好处)
- 如何打开下载的MySQL文件(mysql下载后怎么打开)