触发器

什么是触发器,一触即发,我们数据库里边有好多条sql语句
有的sql语句可以不用直接执行,而有其他的sql语句触发让其执行。
触发器很少使用,不会大量被使用。原因是增加了数据维护的难度

例子:商品有库存,用户每下一个订单,商品库存需要减少。
insert into 订单表 values(),
update 商品表 set 库存=库存-购买数量

如果这个地方使用触发器,可以减少代码开发成本。
insert into 订单表 values()
在数据库里面有触发器,让update自动执行。
主要要素:
时间 :insert 语句执行之前还是之后
地点:在那张表里面制作触发器。
事件:insert/update/delete
操作:执行一条update语句 

# 建立商品表
drop table if exists goods;
create table goods(
	g_id int primary key auto_increment comment '主键id',
	g_name varchar(20) comment '商品名称',
	g_price decimal(10,2) comment '商品价格',
	g_stock smallint  comment '商品库存'
);


# 建立订单表
drop table if exists indent;
create table indent(
	d_id int primary key auto_increment comment '主键id',
	g_id int comment '商品id',
	d_num smallint comment '购买数量'
);
#购买htc三个 订单表增加3个 商品表减少3个
insert into indent(g_id,d_num) values(3,3);
update goods set g_stock=g_stock-3 where g_id=3

创建触发器
create trigger 名称
时间
事件
地点
for each row
begin
  触发器过程语句
end;

create trigger indent_ai_tri
after insert
on indent
for each row
begin
 update goods g_stock=g_stock-3 where g_id=3 
end;
现在触发器不够灵活,要使得其灵活

create trigger indent_ai_tri
after insert
on indent
for each row
begin
 update goods g_stock=g_stock-new.d_num where g_id=new.g_id 
end; 

情况:用户反悔了,想要取消订单。这样改订单对应的商品双流需要
还原。对应的订单需要删除
create trigger indent_ad_tri
after delete
on indent
for each row
begin
 update goods g_stock=g_stock+old.d_num where g_id=old.g_id 
end;
通常情况下insert语句需要使用new关键字获取信息delete语句需要使用old获得信息
new:通常在insert语句之后来使用
old:通常在delete语句之后来使用
update:new获取跟新之后的数据,old获取更新之前的数据
用户下订单,认为商品数量不太合适,需要更改商品数量
用户反悔 更改数量
update 订单表 set num=3 where id=xx
update 商品表 数量=数量+原先的数量(old)-新的数量(new)
通过触发器实现自动修改商品数量

create trigger indent_au_tri
after update
on indent
for each row
begin
 update goods g_stock=g_stock+old.d_num where g_id=old.g_id 
end

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值