MySQL触发器

触发器(trigger):在监视表发生某些操作前或者操作后,触发某些操作。(不能监视select操作)

触发器创建语法四要素:监视表(table)  + 监视事件(insert/update/delete)  + 触发时间(after/before)  + 触发事件(insert/update/delete)

语法:

create trigger triggerName

after/before insert/update/delete on tablename

for each row   #这句话在mysql是固定的

begin

    sql语句;

end;


创建触发器前需要修改默认的结束符,不然触发器没输入完全,MySQL就以为我们输入完成了
mysql> delimiter $
将默认的分号结束符修改为$,退出前记得修改回原来的结束符。

首先创建两张表用以实验:
创建物品表
create  table tb_goods(
        gid  int  not  null primary key auto_increment,
        name  varchar(10)  not  null  default '',
        num int unsigned not null default 0
) default  charset=utf8;
insert  into  tb_goods (name,  num) values ("猪",  15),("羊",  20), ("狗",  10), ("猫",  5);

创建订单表:
create table tb_order(
        oid int not null auto_increment,
        gid int not null,
        num int unsigned not null default 0,
        constraint mkey primary key (oid),
        foreign key (gid) references tb_goods(gid)
)default charset=utf8;

创建触发器:
触发器1
create  trigger  tg1  after  insert  on  tb_order
for  each  row
begin
        update  tb_goods  set  num=num- new.num  where  gid= new.gid;
end$

触发器2

create  trigger tg2  after  delete  on tb_order

for each row

begin

        update tb_goods set num = num + old.much where gid = old.gid;(注意这边的变化)

end$


触发器3

create  trigger  tg3  after  update  on  tb_order

for each row

begin

        #update tb_goods set num = num+old.much-new.much where id = old/new.gid; #对于只更新数据的可以只用一行语句

        update tb_goods set num = num + old.num where gid = old.gid;

        update tb_goods set num = num - new.num where gid = new.gid;

end$

当触发器操作失败时,针对on后面的表的操作也将失败

对于insert插入后的数据行用new代替,对于delete删除的行用old代替,对于update,更新前的行用old代替,更新后的行用new代替

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值