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、插入后,各个表的数据
链接地址::http://www.bkjia.com/Mysql/1032177.html
mysql触发器使用的更多相关文章
- MySQL触发器如何正确使用
MySQL触发器如何正确使用 2010-05-18 15:58 佚名 博客园 字号:T | T 我们今天主要向大家介绍的是MySQL触发器进行正确使用,其中包括对MySQL触发器发器的语句创建,触发时 ...
- 【转】mysql触发器的实战(触发器执行失败,sql会回滚吗)
1 引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程 ...
- redis作为mysql的缓存服务器(读写分离,通过mysql触发器实现数据同步)
一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...
- mysql触发器的例子--插入前更新数据
本文介绍下,一个mysql触发器的例子,在数据插入前更新相关内容,有需要的朋友参考下. mysql触发器的例子,如下: view source print? 001 mysql> CREATE ...
- mysql触发器的作用及语法
触发器是一种特殊的存储过程,它在插入,删除或改动特定表中的数据时触发运行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力. 数据库触发器有下面的作用: 1.安全性.能够基于数据库的值使用户具有 ...
- MySQL 触发器结构及三个案例demo
--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了.这跟SQL的标准有所不同. CREATE TRIGGER语法 CREATE TRIGG ...
- 利用MySQL触发器实现check和assertion
MySQL虽然输入check语句不会报错,但是实际上并没有check的功能.但是MySQL 依然可以利用触发器来实现相应功能. 本文将根据两个例子简要阐述MySQL实现check和assertion的 ...
- 猎八哥浅谈MYSQL触发器
什么是MYSQL触发器,我们先了解一下触发的意思.触发的字面意思是指因触动而激发起某种反应. MYSQL必知必会中对触发器的解释是:MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于 B ...
- MYSQL触发器在PHP项目中用来做信息备份、恢复和清空
案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...
- MySQL触发器在PHP项目中用来做信息备份、恢复和清空的方法介绍
案例:通过PHP后台代码可以将员工的信息删除,将删除的员工信息进行恢复(类似于从回收站中恢复员工信息),并且还可以将已经删除的员工进行清空(类似于清空回复站的功能). 思路:要有一张员工表,还要有一张 ...
随机推荐
- [课程设计]Scrum 2.5 多鱼点餐系统开发进度(下单一览页面-菜式添加框架设计)
Scrum 2.5 多鱼点餐系统开发进度 (下单一览页面-菜式添加框架设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题 ...
- HDU3333 Turing Tree 树状数组+离线处理
Turing Tree Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Calendar日历小程序
//有待完善,有点bugpackage com.sunshine.framework.calendar.model;import java.util.Calendar;/** * * <p> ...
- centos 服务开机启动设置
建立服务文件以nginx 为例 vim /lib/systemd/system/nginx.service 在nginx.service 中插入一下内容 [Unit] Description=ngin ...
- 15.Linux安装DHCP服务为虚拟机分配IP
参考博客:http://www.jb51.net/article/31607.htm $ rpm -ql dhcp #检查是否安装dhcp $ yum -y install dhcp* ...
- <开心一笑> 前端工程师你们伤不起!
前端工程师你们伤不起!! 来自: 刻铭 2011-03-11 14:09:53 前端工程师伤不起 老子几年前进了互联网圈!!!!!!!成了前端工程师,名字是不是很拉风,有木有!!!!!!!! 尼玛 ...
- Krajee 文件上传
http://plugins.krajee.com/file-input/demo#ajax-uploads 插件官网 项目要个好看点的上传控件,于是搜到了这个. git的地址是 https://gi ...
- 分部类(partial)
一般来说,一个类.结构或接口位于一个源文件中,但某些情况,比如大型项目.特殊部署时,可能需要把一个类.结构或接口放在几个文件中来处理.等到编译时,自动把它们合起来,这就得应用 C# 分部类了. C# ...
- for_each使用方法详解[转]
for_each使用方法详解[转] Abstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL)曾經討論過for_each(),不過當時功力尚淺,只談 ...
- ANSI C与GNU C
GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.它在编写linux的时候自己制作了一个标准成为 GNU C标准.A ...