Mysql中的触发器定义及语法介绍


Posted in MySQL onJune 25, 2022

1.定义:

  触发器和存储过程相似,都是嵌入到 MySQL 中的一段程序。触发器是由事件来触发某个操作。当数据库执行这些事件时,就会激活触发器来执行相应的操作。这些事件称为触发条件,在MySQL中,有UPDATE,INSERT,和DELETE。

  • 在MySQL中,目前只有UPDATE,INSERT,和DELETE这三种操作,才会触发触发器,其他操作都不支持触发器。这和Oracle中的触发器有很大的区别,要注意区分。
  • 触发器的每个表每次事件,都只允许一个触发器。因此,每个表最多值允许有6个触发器。如果一个表有两个事件,INSERT和DELETE,那么就要分别创建一个触发器。
  • 只有表才支持触发器,视图和临时表不支持。

2.语法:

CREATE TRIGGER TRIGGER_NAME
BEFORE/AFTER 
UPDATE/INSERT/DELETE ON TABLE_NAME 
FOR EACH ROW
#触发器主体
[BEGIN]
SQL操作
[END];
  • 创建触发器:和创建存储过程是一样,用的都是CREATE 语句,但要注意,这里没有 OR REPLACE。
  • TRIGGER_NAME:触发器名称。在MySQL中,要保证每个表中的触发器是唯一的,每一个数据库内的触发器可以不唯一,这就说明了一个数据库内的两个表可以有相同的触发器。这种行为在其他的数据库内是不被允许的。但是为了格式上的规范,还是要尽可能的保证TRIGGER_NAME的唯一性。
  • BEFORE/AFTER:触发器被触发的时刻。你如果希望触发器在触发事件之前发生,就使用BEFORE,如果希望在触发事件之后发生,就使用AFTER。
  • UPDATE/INSERT/DELETE:触发事件,触发条件。在MySQL中,只有这三种DDL操作支持触发器,其他操作都不被允许。
  • FOR EACH ROW:受触发事件影响的每一行都要激活触发器的动作。这里指的是行级触发,在MySQL里,FOE EACH ROW不可省略,不支持语句级触发。
  • 触发器主体:既可以是单独的一条SQL语句,也可以是由BEGIN...END组成的复杂结构块。
# 创建一个触发器T1,在对表customer做插入操作时,就会触发T1,之后会在日志表note中插入一条数据
CREATE TRIGGER T1
AFTER 
INSERT ON customer
FOR EACH ROW # 触发器主体
INSERT INTO note(日期,目标,操作) VALUES(NOW(),'customer','insert');

3.删除触发器

  和删除表和存储过程类似,都是使用DROP语句来删除触发器。

#删除触发器T1
DROP TRIGGER IF EXISTS T1;

触发器不能够更新和修改,想要修改一个触发器的内容,只能先将触发器删除,在创建一个新的触发器。

4.查询触发器

#在已知数据库内,查询触发器
SHOW TRIGGERS;
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = '触发器名'
#查询所有的触发器
SELECT * FROM information_schema.TRIGGERS(WHERE TRIGGER_SCHEMA = '数据库名')

5.触发器类型OLD和NEW的使用

  触发器在DDL操作之前或者之后触发,总会对目标表做出一定的改动,有时我们需要知道目标表改变前后的值,这就用到了OLD和NEW的用法。

顾名思义,OLD就是改变之前的值,是UPDATE之前或者是要被DELETE或者已经被DELETE的值。

  而NEW,则是UPDATE之后的新值,即将INSERT或者已经INSERT的值。

Mysql中的触发器定义及语法介绍

  具体实例:

#创建customer表
CREATE TABLE `customer` 
(`CUST_ID` int(11) NOT NULL AUTO_INCREMENT,
`CUST_NAME` varchar(10) NOT NULL,
`CUST_TEL` varchar(10) DEFAULT NULL,
PRIMARY KEY (`CUST_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

#向表中插入数据

#创建一个update触发器
CREATE TRIGGER T2
AFTER 
UPDATE ON customer
FOR EACH ROW 
#old和new的使用方法:old.columnname/new.columnname(列名)
#将更新前后的值,赋值给两个变量
SELECT OLD.CUST_ID,NEW.CUST_ID INTO @OLD_ID,@NEW_ID;

#触发触发器T2
UPDATE customer SET CUST_ID = '10000' WHERE CUST_NAME = 'AAA';

#查询OLD和NEW
SELECT @OLD_ID,@NEW_ID;

到此这篇关于Mysql中的触发器的文章就介绍到这了,更多相关mysql触发器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

MySQL 相关文章推荐
MySql新手入门的基本操作汇总
May 13 MySQL
Mysql效率优化定位较低sql的两种方式
May 26 MySQL
Mysql 如何查询时间段交集
Jun 08 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 MySQL
mysql连接查询中and与where的区别浅析
Jul 01 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 MySQL
MySQL 开窗函数
Feb 15 MySQL
MySQL实现配置主从复制项目实践
Mar 31 MySQL
以MySQL5.7为例了解一下执行计划
Apr 13 MySQL
MySQL sql模式设置引起的问题
May 15 MySQL
MySQL数据库配置信息查看与修改方法详解
Jun 25 #MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 #MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 #MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 #MySQL
MySQL数据库表约束讲解
Jun 21 #MySQL
MySQL数据库实验之 触发器和存储过程
Jun 21 #MySQL
MySQL transaction事务安全示例讲解
Jun 21 #MySQL
You might like
Protoss热键控制
2020/03/14 星际争霸
谈谈关于php的优点与缺点
2013/04/11 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
PHP引用返回用法示例
2016/05/28 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
javascript使用onclick事件改变选中行的颜色
2013/12/30 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
2015/11/17 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python中使用HTMLParser解析html实例
2015/02/08 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
django query模块
2019/04/20 Python
python语言元素知识点详解
2019/05/15 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
wxpython绘制音频效果
2019/11/18 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
小学教师的自我评价范例
2013/10/31 职场文书
监察建议书范文
2014/03/12 职场文书
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL