• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

小贝_mysql触发器使用_MySQL

mysql 搞代码 4年前 (2022-01-09) 25次浏览 已收录 0个评论

触发器

简要
1、触发器基本概念
2、触发器语法及实战例子
3、before和after区别

一、触发器基本概念

1、一触即发

2、作用: 监视某种情况并触发某种操作

3、观察场景

一个电子商城:

商品表,goods

主键(goods_id)

商品名称(goods_name)

库存(goods_number)

1

iphone6

10

2

小米手机

28

订单表,orders

订单主键(order_id)

商品主键(goods_id)

购买数量(buy_num)

1

2

3

2

1

4

从php的角度看,完成下单与减少库存的逻辑如下:

a、下单后,往orders表插入数据:

insert into orders(goods_id,bug_num)values(2,3);

b、修改goods对应商品的库存:

update goods setgoods_number=goods_number-3 where goods_id=2;

总结: 这两个逻辑可以看成是一个整体,或者说,insert—>触发update

处理方案: 使用触发器来解决上述问题,我们可以监视某张表的变化,当发生某种变化时,触发某个操作

4、触发器监视以及触发什么变化

a、监视update/insert/delete

b、触发update/insert/delete

二、触发器语法

1、创建语法的四个要素

2、创建触发器

2.1、测试案例的表结构

#商品表

create table goods

(goods_id int,goods_name varchar(10),goods_number smallint)charset=utf8;

insert into goods

values(1,'iphone6',10),(2,'小米手机',28);

#订单表

create table orders

(order_id int,goods_id int,buy_num smallint)charset=utf8;

insert into orders

values(1,2,3),(2,1,4);

2.2、创建触发器语法

createtrigger triggerName

after/beforeinsert/update/deleteon Table

begin

sql语句(一句或多句sql)

end;

2.3、触发器实例

2.3.1、建立触发器,往订单表orders插入数据时,更新商品表goods的库存量

往orders表插入数据前,各个表的数据如下

往orders表插入数据:

查看goods表的数据:

此时,orders表插入的是iphone6两台,但是减少的却是小米手机商品的库存。

当往orders表插入的是小米手机两台呢?

此时,减少的也是小米手机,但是减少的是1,而不是2

问题:出在哪里?

1、查看刚建立的触发器信息

原来触发的sql语句是固定某个商品id的,因此,触发只对该商品id发生作用

2、如何在触发器引用行的值?

对于insert而言,新增的行,用new来表示,行中的每一列的值,用new.列名来表示

3、修改触发器t1(删除原来重新建立)

4、验证结果

插入前,各个表数据如下

插入orders表,iPhone6三台

插入orders表,小米手机五台

2.3.2、建立触发器,往订单表orders删除数据时,更新商品表goods的库存量

a、建立触发器t2

b、删除orders的数据

b1、删除前,各个表数据

b2、删除后,各个表数据:

总结:

对于delete而言,如何在触发器引用行的值?

对于delete操作来说,它要操作的数据,已经是存在表中了,因此用old来表示,行中的每一列的值,用old.列名来表示

2.3.3、建立触发器,往订单表orders修改数据时,更新商品表goods的库存量

a、创建触发器t3

b、修改orders表数据

b1、修改前,各个表的数据

b2、修改后,各个表的数据

总结:

对于update而言,如何在触发器引用行的值?

对于update操作来说,它要操作的数据,已经是存在表中了,因此用old来引用修改前的值,修改后则为用new来引用新值

2.4、查看触发器和删除触发器语法

2.4.1、查看所有触发器

2.4.2、查看某个触发器

2.4.3、删除触发器

三、before与after的区别

1、区别:

a、after是先完成数据的增删改后,再触发

触发中的语句晚于增删改,无法影响前面的增删改动作

b、before是先完成触发,再增删改

触发的语句先于监视的增删改发生,我们有机会判断,修改即将发生的操作

2、案例:

对于所下订单进行判断,如果订单的数据>5,则认为是非法订单,强制把所订商品数据改成5

2.1、建立触发器本文来源gao.dai.ma.com搞@代*码#网

2.2、插入前,各个表的数据

2.3、插入后,各个表的数据

The quieter you become,the more you are able to hear!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:小贝_mysql触发器使用_MySQL

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址