小贝_mysql 触发器使用
触发器
简要
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); |
|
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、建立触发器
2.2、插入前。各个表的数据
2.3、插入后。各个表的数据
The quieter you become。the more you are able to hear!
小贝_mysql 触发器使用的更多相关文章
- 小贝_mysql建表以及列属性
mysql建表以及列属性 简要: 一.建表原则 二.具体的列属性说明 一.建表原则 建表: 事实上就是声明列的过程,数据终于是以文件的形式放在硬盘(内存) 列: 不同的列类型占的空间不一样. 选列的原 ...
- 小贝_mysql优化学习
mysql优化 简要: 1.数据库设计优化 2.sql语句优化 3.表切割 4.读写分离技术 一.数据库设计优化 1.表设计要符合三范式.当然,有时也须要适当的逆范式 2.什么是三范式 一范式: 具有 ...
- 小贝_mysql select连接查询
select连接查询 简要: 一.union联合查询 二.左右内连接 一.union联合查询 作用: 把2次或多次查询结果合并起来 具体: (表1查询结果) union (表2查询结果) 运行: 先算 ...
- 小贝_mysql主从复制作用以及案例
mysql主从复制 简要: 一.mysql用户授权 二.mysql bin-log日志 三.mysql主从复制 一.mysql用户授权 1.命令 2.作用:进行权限控制 3.样例: (备注: 同意 ...
- 小贝_mysql数据库备份与恢复
mysql数据库备份与恢复 简要: 一.数据库备份 二.数据库恢复 一.数据库备份 1.备份简单说明 : 系统执行中,增量备份与总体备份 例: 每周日总体备份一次,周一到周 ...
- 小贝_mysql 存储过程
存储过程 简要: 1.什么是存储过程 2.使用存储过程 一.存储过程 概念类似于函数,就是把一段代码封装起来.当要行这段代码的时候,能够通过调用该存储过程来实现.在封装的语句体里面.能够用if/els ...
- 小贝_mysql sql语句优化过程
sql语句优化 一.SQL优化的一般步骤 (1).通过show status命令了解各种SQL的运行频率. (2).定位运行效率较低的SQL语句-(重点select) (3).通过explain分析低 ...
- 小贝_mysql三种子查询
mysql三种子查询 简要: 一.三种子查询 二.三种子查询理解模型 一.mysql 三种子查询 where子查询.from子查询.exists子查询 二.理解模型: 2.1.一个好的模型,便于我们去 ...
- 小贝_mysql select5种子句介绍
mysql select5种子句介绍 简要 一.五种字句 二.具体解释五种字句 一.五种字句 where.group by.having.order by.limit 二.具体解释五种字句 2.1.理 ...
随机推荐
- TextView 中文文档
属性名称 描述 android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/all) ...
- Generalized normal distribution and Skew normal distribution
Density Function The Generalized Gaussian density has the following form: where (rho) is the " ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
- [leetcode]Search in Rotated Sorted Array II @ Python
原题地址:https://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/ 题意: Follow up for "Sea ...
- "Your computer could not be joined to the domain. You have exceeded the maximum number of computer accounts you are allowed to create in this domain. Contact your system administrator to have this limit reset or increased."
用一个普通的域帐号玩私有云的时候,遇到了如下的报错. "Your computer could not be joined to the domain. You have exceeded ...
- js将滚动条滚动到指定位置的方法
代码如下(主要是通过设置Location的hash属性): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- 超链接a标签的href与onclick中使用javascript的区别
onclick中javascript的区别一般没用到都没注意,但出错时才有些郁闷,看文本章解释如下: 以前一直很随意,后来看.net里的linkbutton似乎是用在<a href=" ...
- Spring(十七):Spring AOP(一):简介
背景: 需求: 给一个计算器计算函数执行前后添加日志. 实现: 1)直接在函数中修改代码: IArithmeticCalculator.java接口类 package com.dx.spring.be ...
- MySQL连接数过多登录不上
[mysqld_safe]socket = /var/run/mysqld/mysqld.socknice = 0 [mysqld]## * Basic Set ...
- Flask刷新问题
修改页面中内容,特别是图片后,总是刷新不了.调试时,我常常通过修改端口来解决,从80-99不断改. 服务器部署,也遇到同样问题,重启web服务器,重启计算机都不行,网页已经改过来了,但是图片还是老图片 ...