您的位置:首页 > 数据库 > MySQL

mysql测试题:使用触发器完成订单与库存之间的动态连接

2018-01-19 17:54 405 查看
1.首先要理解触发器的使用场景:

个人浅显通俗的理解是当一张数据表的数据发生变化时,另外一张数据表与之存在逻辑关系的某一列或者多列的值也应对应发生变化;一般情况需要我们手动的进行修改,可是触发器的使用会自动完成这些内部的操作,防止人为的修改错误!

触发器trigger的四要素:

监视地点,
监视事件,
触发时间,
触发事件
基本语法:
create trigger trigger_name
After/before  insert/update/delete on  表名
For each row #这句话是固定的
Begin
sql语句:#一句或者多句,insert/update/delete范围类
End;


2.看下面创建的两张数据表;goods表为库存表,order表为订单表,当有订单产生(订单表插入新行)时,逻辑上一定会对库存表造成影响,所以需要触发器完成触发工作



3.假定库存表goods现在存在这些商品和库存数量,而订单表为空



当我们下订单后,库存表对应此商品的数量应自动的发生变化(减少),尝试利用创建一个增加订单后的触发器,需要注意的是:begin和end之间的update语句必须以分号结尾,可是end后也必须接分号,所以我们还需要做一个定义语句结束的分隔符$,如下,创建触发器成功:



表中的new关键字代表order表中新增加的一行数据,new.num表示这一行对应的num字段的值,new.gid对应gid列的值;触发器的意思为:当有insert动作在orders表上时,就更新(减少)update表中对应产品的good_num字段的值;



可以看出我们只更新了orders表,可goods表却动态的发生了变化,这就是触发器的作用!

4.同理可以创建触发delete和update的触发器,创建trigger语句如下:

删除触发器:
create trigger tg2
after delete on orders
for each row
begin
update goods set good_num=good_num+old.num where id = old.gid;
end$

修改触发器:
create trigger tg3
after update on orders
for each row
begin
update goods set good_num=good_num+old.num-new.num where id = old.gid;
end$


上面例子中仅以修改orders表中的num为例,实际工作生活中修改购物车可能不止这一项,一切为了了解触发器的原理,这里不过多纠结!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息