我是靠谱客的博主 糊涂面包,最近开发中收集的这篇文章主要介绍mysql 触发器 for_mysql 触发器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、触发器:trigger

1、触发器创建语法4要素:

1、监视地点:table

2、监视事件:insert / update / delete

3、触发时间:after / before

4、触发事件:insert / update / delete

2、需求:

1、商品表:goods

订单表:ord

当下1个订单时对应的商品要减少(买几个商品就减少几个库存)

2、分析:

监视地点:ord

监视事件:insert

触发时间:after

触发事件:update

3、创建触发器的语法实例:

delimiter  $       //修改定界符

create trigger t1

after

insert

on ord

for each row

begin

SQL1 ; SQL2 ........;

end;

$

4、查看触发器:show trigger t1;

删除触发器:drop trigger t1;

5、引用行变量:old 和 new

insert : 只能引用 new

delete:只能引用old

update: 两者都可以使用

6、应用实例:

1、创建表:

create table goods (

gid int,

name varchar(20),

num smallint

);

create table ord (

oid int,

gid int,

much smallint

);

insert into goods values

(1, 'cat', 34),

(2, 'dog', 65),

(3, 'pig', 21);

2、创建触发器:

1、增加订单:

create trigger t1  after  insert on  ord  for each row

begin

/* 这一个语句是有问题的,*/

update goods set num = num - 2 where gid = 1;

/* 下面这个才是对的 :被监视的语句是否能在触发器中被引用到*/

update goods set num = num - new.much where gid = new.gid;

end;

$

2、删除订单:

create trigger t2 after delete on ord for each row

begin

update goods set num = num +old.much where gid = old.gid;

end;

$

3、修改订单(仅限数量):

create trigger t3 before delete on ord for each row

begin

update goods set num = num - new.much +old.much where gid = old.gid;

end;

$

思考:before 目前似乎没有看出与 after 的区别?答:insert 之后 new 行已经插入到表中,之后的IF操作就无效了

再思考:如果剩余 3 头猪,但是客户买了 10 头猪,发生什么情况?能否预防?

能否在购买量 much > 库存量 num 时,把 much 自动改为 num

提示:before 下手

create trigger t5  before insert on  ord  for each row

begin

declare  rnum int;

select num into rnum from goods where gid =  new.gid;

if new.much > rnum then

set new.much  = rnum;

end if;

update goods set num = num - new.much where gid = new.gid;

end;

$

3、触发器中 for each row 是干嘛的?

解释:行级触发器,每一行受影响,触发器都执行

在 oracle 中,如果不写,则无论影响多少行,都只会执行一次:语句级触发器

遗憾的是:mysql 目前不支持语句级触发

最后

以上就是糊涂面包为你收集整理的mysql 触发器 for_mysql 触发器的全部内容,希望文章能够帮你解决mysql 触发器 for_mysql 触发器所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部