什么是触发器,一触即发,我们数据库里边有好多条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
触发器
最新推荐文章于 2020-04-13 23:23:03 发布