小贝_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.理 ...
随机推荐
- Orchard模块开发全接触3:分类的实现及内容呈现(Display)
一:分类用现有技术怎么实现? 实际就是创建 Query 和 Projection,如果不知道怎么做,参考:Orchard之在前台显式一个属于自己的列表(在这篇里,还进行了稍稍拓展),当然,基础的知道, ...
- mac或者linux磁力下载方法:远离渣雷
wget是linux下常用的命令行下载工具,是Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件. t-get是一个简单的命令行BT下载工具,可以用于BT种子和磁力链接的下载 tg ...
- 【已解决】Android微信开放平台,申请移动应用的 应用签名 如何获取
在微信开放平台,申请移动应用的时候: https://open.weixin.qq.com/cgi-bin/appcreate?t=manage/createMobile&type=app&a ...
- go语言之进阶篇数组越界导致panic
1.数组越界导致panic 示例: package main import "fmt" func testa() { fmt.Println("aaaaaaaaaaaaa ...
- Threejs 开发3D地图实践总结【转】
Threejs 开发3D地图实践总结 前段时间连续上了一个月班,加班加点完成了一个3D攻坚项目.也算是由传统web转型到webgl图形学开发中,坑不少,做了一下总结分享. 1.法向量问题 法线是垂 ...
- Libnids(Library Network Intrusion Detection System) .
Libnids(Library Network Intrusion Detection System)是一个网络入侵检测开发的专业编程接口.它实现了基于网络的入侵检测系统的基本框架,并提供了一些基本的 ...
- Linux中如何查看文件夹的大小
直接查看当前文件夹的大小: du –sh 只看文件夹的名字里包含某字符串的子文件夹的大小: du –h –d 1 | grep "BACKEND" 我的linux系统被阉割的比较厉 ...
- 提高sql2005中带freetexttable和rank的全文检索的速度
原来使用中的sql2005的全文检索的速度总是不如意,尤其是带rank的.今天搜了一下,原来在freetexttable中还有一个参数top_n_by_rank,是第4个参数.注意还要设置:EXEC ...
- CSS渐变字体、镂空字体、input框提示信息颜色、给图片加上内阴影、3/4圆
1.渐变字体 主要是看:-webkit-background-clip: text; 该属性 <style> .b1{ width: 500px; height: 200px; font- ...
- 转:Deep learning系列(十五)有监督和无监督训练
http://m.blog.csdn.net/article/details?id=49591213 1. 前言 在学习深度学习的过程中,主要参考了四份资料: 台湾大学的机器学习技法公开课: Andr ...