阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL数据库之触发器

392次阅读
没有评论

共计 2546 个字符,预计需要花费 7 分钟才能阅读完成。

1 引言

        本文是对 MySQL 中触发器的总结,从触发器概念出发,结合实例对创建触发器、使用触发器、删除触发器进行介绍。

2 触发器简介

        MySQL 触发器和存储过程一样,都是嵌入到 MySQL 的一段程序。触发器是由事件来触发某个操作,这些事件包括 INSERT、UPDATE、DELETE。如果定义了触发器,当数据库执行这些语句的时候就会激活触发器执行相应的操作,触发程序是与表有关的命令数据库对象,当表上出现特定事件,将激活该对象。

触发器是一个特殊的存储过程,不同的是,执行存储过程要使用 call 语句来调用,而触发器的执行不需要用 call 来调用,也不需要手工启动,只要当一个预定义的事件发生,触发器就会被 MySQL 自动调用。触发器可以查询其他表,而且可以包含复杂的 SQL 语句。

3 创建触发器

(1)创建只有一条执行语句的触发器

语法结构如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_stmt

trigger_name:用户自定义的触发器名称;

trigger_time:标识触发事件,可以指定为 before(时间发生前执行)或 after(事件发生后执行);

trigger_event:标识触发事件,包括 INSERT、UPDATE、DELETE;

table_name:触发器建立在哪个表上;

trigger_stmt:触发器执行语句。

(2)创建有多个执行语句的触发器

        语法结构如下:

CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW

    BEGIN

      语句执行列表

    END

        当触发器有至少一条的执行语句时,多条执行语句需要用 BEGIN 和 END 包裹,分别表示整个代码块的开始和结束。

为演示触发器操作,我们先创建一下三个数据表:

create table tb_student(id int PRIMARY key auto_increment,

         name varchar(10)

);

create table tb_before_trigger(id int PRIMARY key auto_increment,

         num int ,

         time_now datetime NULL DEFAULT CURRENT_TIMESTAMP

);

create table tb_after_trigger(id int PRIMARY key auto_increment,

         num int ,

         time_now datetime NULL DEFAULT CURRENT_TIMESTAMP

);

示例 1: 创建一个名为 before_trigger 的触发器,该触发器会在每次对表 tb_student 执行 insert 操作前触发,触发时会往 before_trigger 表插入一条包含 tb_student 表总记录数的记录。

delimiter //

create trigger before_trigger before insert

         on tb_student for each row

         begin

                   insert into tb_before_trigger (num) select count(*) from tb_student;

         end

         //

delimiter ;

示例 2: 创建一个名为 after_trigger 的触发器,该触发器会在每次对表 tb_student 执行 insert 操作前触发,触发时会向 before_trigger 表插入一条包含 tb_student 表总记录数的记录。

delimiter //

create trigger after_trigger after insert

         on tb_student for each row

         begin

                   insert into tb_after_trigger (num) select count(*) from tb_student;

         end

         //

delimiter ;

来测试一下示例 1 和示例 2 中创建的触发器,往 tb_student 表中插入一条数据(插入前 3 个表没有任何记录):

insert into tb_student (name) values('zhangsan');

插入后,查看三个表中数据:

tb_student 表:

  MySQL 数据库之触发器

tb_before_trigger 表:

  MySQL 数据库之触发器

tb_after_trigger 表:

  MySQL 数据库之触发器

可以看到,在 tb_student 表执行 insert 操作后,另外两个表也分别更新了记录,tb_before_trigger 表 num 值为 0,证明在 tb_student 执行 insert 操作前插入的;tb_after_trigger 表 num 值为 1,证明在 tb_student 执行 insert 操作后插入的——这就是 before 与 after 的区别。

对于其他条件触发器,使用方法与示例 1 和示例 2 类似,本文不在演示。

4 查看触发器

(1)show triggers 语句

通过 show triggers 语句可以查看示例 1 和示例 2 中创建的触发器:

show triggers;

输出结果:

  MySQL 数据库之触发器

(2)在 triggers 表中查看触发器

在 information_schema 数据库的 triggers 表中存放在 MySQL 数据库中的所有触发器,可以通过查询语句进行查看:

select * from information_schema.triggers where trigger_name = 'before_trigger' ;

输出结果:

MySQL 数据库之触发器 

当不指定查询条件时,即是指查看所有触发器信息。

5 删除触发器

使用 DROP TRIGGER 语句可以删除触发器,基本语法结构如下:

DROP TRIGGER [schema_name] trigger_name

其中,schema_name 表示数据库名称,是可选参数,如果省略则表示从当前数据库中删除触发器。

示例 3: 删除示例 1 中创建的触发器 before_trigger

drop trigger before_trigger;

6 总结

        在某些时候,触发器可以起到锦上添花的作用,但是,触发器的效率并不高,所以还是尽量少用。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2546字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7965826
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...