我是靠谱客的博主 妩媚航空,最近开发中收集的这篇文章主要介绍MySQL 触发器的使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MySQL 触发器trigger

触发器:
监视某种情况并且触发某种操作

触发器创建语法的四要素:

1. 监视地点 table
2. 监视事件 insert/update/delete
3. 触发时间 after/before
4. 触发事件 insert/update/delete

语法:

create trigger triggerName
after/before insert/update/delete on 表名
for each row   #这句话在mysql是固定的
begin
    sql语句;
end;

例子:
数据准备

#商品表
create table g(
  id int primary key auto_increment,
  name varchar(20),
  num int
);

#订单表
create table o(
  oid int primary key auto_increment,
   gid int,
    much int
);

insert into g(name,num) values('商品1',10),('商品2',10),('商品3',10);

如果我们在没使用触发器之前:假设我们现在卖了3个商品1,我们需要做两件事

1.往订单表插入一条记录

insert into o(gid,much) values(1,3);

2.更新商品表商品1的剩余数量

update g set num=num-3 where id=1;

创建一个触发器

create trigger tg1
after insert on o
for each row 
begin
update g set num=num-new.much where id=new.gid;(注意此处和第一个触发器的不同)
end$

这样当往订单表中插入数据时就会自动更新商品表的数据

另外两种情况

当用户撤销一个订单的时候,订单表直接删除一个记录,商品表的数量要还原

create trigger tg2
after delete on o
for each row
begin
update g set num = num + old.much where id = old.gid;
end

修改订单表中记录的数量时也要相应的修改商品表中的剩余数量

create trigger tg3 
after update on o
for each row
BEGIN
update g set num = num+old.much-new.much where id = new.gid;
end

现在还可能存在一个问题,就是当订单中插入的数量大于商品剩余数量,那么商品剩余数量更新出来的结果就是负数,解决方法就是在订单表插入数据之前进行判断,判断要插入的数量是否大于商品的剩余数量

create trigger tg4
before insert on o
for each ROW
BEGIN
    SET @num = (select num from g where id = new.gid);
    if new.much > @num then 
        set new.much = @num;    
  end IF;
  update g set num = num - new.much where id = new.gid;
end

最后

以上就是妩媚航空为你收集整理的MySQL 触发器的使用的全部内容,希望文章能够帮你解决MySQL 触发器的使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(245)

评论列表共有 0 条评论

立即
投稿
返回
顶部