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(表结构也一样 ...
随机推荐
- Chrome 完整版官方下载
Chrome下载默认不是完整版本,需要长久等等.so... 在下载地址后加参数:?standalone=1 解决问题.
- iOS仿支付宝首页效果
代码地址如下:http://www.demodashi.com/demo/12776.html 首先看一下效果 状态栏红色是因为使用手机录屏的原因. 1.问题分析 1.导航栏A有两组控件,随着tabl ...
- servlet监听器与事件
前言 在Servlet 2.4/JSP 2.0中,共同拥有八个Listener接口,六个Event类别. 參考:Servlet中的八大Listener 入门 阅读文件夹 Web监听器 监听器的分类 S ...
- 微软同步发行Windows 10和Windows 10 Mobile系统更新
微软今天同步公布了新的 Windows 10 Redstone PC 和 Windows 10 Mobile 预览版. PC 版本是 Build 14271.Mobile 版本是 Build 1426 ...
- nginx uri和request_uri区别
$request_uri This variable is equal to the *original* request URI as received from the client includ ...
- Atitit.mysql 5.0 5.5 5.6 5.7 新特性 新功能
Atitit.mysql 5.0 5.5 5.6 5.7 新特性 新功能 1. MySQL 5.6 5 大新特性1 1.1. 优化器的改进1 1.2. InnoDB 改进1 1.3. 使用 ...
- js删除cookie的方法
以上图片有两种方法,推荐第二种
- webpack 功能大全 【环境配置】
1. webpack简介 webpack 是一个模块打包工具.它使得模块相互依赖并且可构建等价于这些模块的静态资源.相比于已经存在的模块打包器(module bundler),webpack的开发动机 ...
- sparkstreaming+socket workCount 小案例
Consumer代码 import org.apache.spark.SparkConf import org.apache.spark.streaming.StreamingContext impo ...
- 【Navicat Premium】之连接Oracle数据库
1.首先,在连接之前,需要下载oracle官网提供的instantclient-basic-win32-11.2.0.1.0.zip包 官网:http://www.oracle.com/technet ...