mysql测试题:使用触发器完成订单与库存之间的动态连接
2018-01-19 17:54
405 查看
1.首先要理解触发器的使用场景:
个人浅显通俗的理解是当一张数据表的数据发生变化时,另外一张数据表与之存在逻辑关系的某一列或者多列的值也应对应发生变化;一般情况需要我们手动的进行修改,可是触发器的使用会自动完成这些内部的操作,防止人为的修改错误!
触发器trigger的四要素:
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语句如下:
上面例子中仅以修改orders表中的num为例,实际工作生活中修改购物车可能不止这一项,一切为了了解触发器的原理,这里不过多纠结!
个人浅显通俗的理解是当一张数据表的数据发生变化时,另外一张数据表与之存在逻辑关系的某一列或者多列的值也应对应发生变化;一般情况需要我们手动的进行修改,可是触发器的使用会自动完成这些内部的操作,防止人为的修改错误!
触发器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为例,实际工作生活中修改购物车可能不止这一项,一切为了了解触发器的原理,这里不过多纠结!
相关文章推荐
- Mysql中的触发器(库存、用户订单中用到)
- 使用link在两个容器之间建立连接(mysql)
- MySQL 触发器例子(下订单自动减少库存)
- 使用Facade模式更新库存、确认订单、采取打折、确认支付、完成支付、物流配送
- 一个完整的Nodejs项目 完成连接数据库(MySQL),登陆、注册功能 session的使用 和发送邮件
- 静态使用DLL动态连接库
- [导入]为MySQL Connector Net连接MySQL使用正确的连接字符串
- Castle ActiveRecord 使用动态填写参数方式配置数据库连接
- 使用函数递归实现基于php和MySQL的动态树型菜单
- 连接命令层:BtuDatabaseControl组件完成数据库的无缝连接与命令执行(.net),含使用说明及组件下载
- JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
- MYSQL存储过程使用动态SQL 建多表
- Tomcat6.0使用jdbc连接池连接mysql--操作步骤介绍
- MySQL连接8小时未使用连接失效的处理方法
- MySQL触发器的使用
- 解决 c3p0 和 MySQL 集成情况下,连接长时间闲置后重新使用时报错的问题
- JRun 使用 Connector/J JDBC 驱动程序连接 MySQL 数据库
- 使用"函数递归"实现基于php和MySQL的动态树型菜单
- 使用hibernate连接mysql自动中断的问题
- 也谈在动态连接库中如何使用STL库