MYSQL:基础——触发器
MYSQL:基础——触发器引入触发器
触发器
如果你想要某条语句(或某些语句)在事件发生时自动执行。比如: 每当订购一个产品时,都从库存数量中减去订购的数量;无论何时删除一行,都在某个存档表中保留一个副本。就需要用到触发器。
触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):
- DELETE;
- INSERT;
- UPDATE;
说明:
其他MySQL语句不支持触发器。只有表才支持触发器、视图不支持,临时表也不支持。
创建触发器
触发器用CREATE TRIGGER 语句创建,一条伪代码如下:
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name //触发器名称
trigger_time trigger_event //触发时间 触发事件
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body
其中参数的可选项如下:
- trigger_time: { BEFORE | AFTER }
- trigger_event: { INSERT | UPDATE | DELETE }
- trigger_order: { FOLLOWS | PRECEDES } other_trigger_name
故创建一个触发器需要给出4条信息:
- 唯一的触发器名
- 触发器关联的表 ON tb1_name
- 触发器应该响应的活动 DELETE、INSERT、UPDATE
- 触发器何时执行(AFTER、BEFORE)
删除触发器
触发器不支持更新或者覆盖,为了修改一个触发器,必须先删除它,然后重新创建它。
DROP TRIGGER newtype;
使用触发器
INSERT触发器
INSERT触发器在INSERT语句执行之前或者之后执行,需要知道以下几点:
- 在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行。
- 在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值)。即,通过NEW来修改被插入的数据。
- 对于AUTO_INCRMENT列,NEW在INSERT执行之前包含0,在执行之后包含新的自动生成值。
实例:
DELETE触发器
说明:
- 在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行。
- OLD表中的数据全是只读的,不能被修改。
实例:
UPDATE触发器
说明:
- 在UPDATE中,你可以使用OLD和NEW两张表。
- 在BEFORE UPDATE触发器中,NEW中的值可能也被更新(允许更改将要用于UPDATE语句中的值)
- OLD表中的值是只读的,不可以被更改。
实例:
实例
我们创建一个触发器,当ms_sale发生修改操作后,修改ms_order表的数量。
CREATE TRIGGER updateGoods
AFTER UPDATE
ON ms_sale
for each row update ms_order SET or_number=or_number+(OLD.sale_number- NEW.sale_number) WHERE or_id= OLD.sale_or_id;
MYSQL:基础——触发器的更多相关文章
- (2.13)Mysql之SQL基础——触发器
(2.13)Mysql之SQL基础——触发器 关键词:Mysql触发器 1.一般形式 -- 0.查看触发器[1]SHOW TRIGGERS;[2]SELECT * FROM `information_ ...
- MySQL基础(7) | 触发器
MySQL基础(7) | 触发器 基本语法 创建 CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EA ...
- 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器
@ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...
- MySQL基础(二):视图、触发器、函数、事务、存储过程
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 视图和上一篇学到的临时表搜索类似. ...
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- MySQL基础(二)——DDL语句
MySQL基础(二)--DDL语句 1.什么是DDL语句,以及DDL语句的作用 DDL语句时操作数据库对象的语句,这些操作包括create.drop.alter(创建.删除.修改)数据库对象. 2.基 ...
- 初试mysql存储过程&触发器
玩mysql以来,一直没有试过实现存储过程,因为存储过程的语法看起来有些笨重.所以一直采用手动批量运行查询,而且要手动改日期之类的参数. 今天尝试着学了一会,发现其实是很简单的.语法上确实格式复杂些, ...
- MYSQL 基础操作
1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...
随机推荐
- 关于XSuperMES项目使用的PDF框架
我在曾经的项目中使用的是pdfbox.在读取中文文档时能够读出大部分的文字,可是在数字.分页等地方还是不可避免的出现乱码. 于是我在网上搜索,看有没有什么解决方法.看到有说法: "PDFBo ...
- 初探J2EE
还记得在技术交流会上八期给我们讲的J2EE,当时就是云里来屋里去.留在自己脑子中的仅仅有两个字"规范",其他的真是一无全部. 可是如今学了后,又在脑子里留下了两个字"规范 ...
- Android Zxing 加入闪光灯功能
近期做了关于二维码解析的模块 选用的是google的开源projectZxing 在Zxing 加入闪光灯功能 例如以下: 在 com.xxx.xxx.Zxing.camera 包下的CameraMa ...
- Android下 调用原生相机拍照摄像
1 http://www.cnblogs.com/franksunny/archive/2011/11/17/2252926.html 2 http://www.cnblogs.com/vir56k/ ...
- Mac下安装LNMP(Nginx+PHP5.6)环境(转)
安装Homebrew 最近工作环境切换到Mac,所以以OS X Yosemite(10.10.1)为例,记录一下从零开始安装Mac下LNMP环境的过程 确保系统已经安装xcode,然后使用一行命令安装 ...
- win7上python+theano+keras安装
https://blog.csdn.net/yongjiankuang/article/details/50485610 其实过程很简单,首先说一下安装条件: 1.win7 (32和64都可以,下载安 ...
- 第八章 委托,lamdbda 表达式和事件
第八章 委托,lamdbda 表达式和事件 委托是寻址方式的.net版本. 委托是类型安全的类,它定义了返回类型和参数的类型.委托类不仅包含方法的应用,也可以包含对多个方法的引用. 在 C++中,函数 ...
- C#多线程简单例子讲解
C#多线程简单例子讲解 标签: 多线程c#threadobjectcallbacktimer 分类: C#(7) 转载网址:http://www.knowsky.com/540518.html .NE ...
- ActiveMQ与xml rpc
最近项目在做平台间的消息传递,也让我对平台间消息的传递进行了深一步的探讨.先叙述一下概况 公司上一个版本用的是winform做的监控软件,主要做设备的通信和控制,基本的连接如下
- Android中的常见通信机制和Linux中的通信机制
Handler Handler是Android系统中的一种消息传递机制,起作用是应对多线程场景.将A进程的消息传递给B线程,实现异步消息处理.很多情况是将工作线程中需要更新UI的操作消息传递给UI主线 ...