12. SQL 触发器

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

12. 1 创建触发器

触发器(trigger)是一个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MySQL自动调用。

  • 创建只有一个执行语句的触发器
    创建一个触发器的语法如下:
create trigger trigger_name trigger_time trigger event on tb1_name for each row trigger_stmt

其中,trigger_name表示触发器名称,用户自行指定;trigger_time表示触发时机,可以指定为before或after;trigger_event表示触发事件,包括INSERT、UPDATE和DELETE;tbl_name表示建立触发器的表名,即在哪张表上建立触发器;trigger_stmt是触发器执行语句。

【例】创建一个单执行语句的触发器,代码如下:

create table account(acct_num int,amount decimal(10,2));
create trigger ins_sum before insert on account
for each row set @sum=@sum+NEW.amount

首先,创建一个account表,表中有两个字段,分别为acct_num字段(定义为int类型)和amount字段(定义成浮点类型);其次,创建一个名为ins_sum的触发器,触发的条件是向数据表account插入数据之前,对新插入的amount字段值进行求和计算。

  • 创建有多个执行语句的触发器
create trigger trigger_name trigger_time trigger_event
on tb1_name for each row
begin
语句执行列表
end

【例】创建有多个执行语句的触发器

create table test1(a1 int);
create table test2(a2,int);
create table test3(a3 int not null,auto_increcement primary key);
create table test4(a4 int not null auto_increment primary key,b4 int default 0
);delimeter
create trigger testref before insert on test1
for each row begininsert into test2 set a2=NEW.a1;delete from test3 where a3=NEW.a1;update test4 set b4=b4=1 where a4=NEW.a1
end
delimiter;insert into test3 (a3) values
(null),(null),(null),(null),
(null),(null),(null),(null),
insert into test4 (a4) values
(0),(0),(0),(0),(0),(0),(0),(0),;

12.2 查看触发器

  • SHOW TRIGGERS语句
show triggers;
  • 在triggers表中查看触发器信息
    在MySQL中,所有触发器的定义都存在INFORMATION_SCHEMA数据库的TRIGGERS表格中,可以通过查询命令SELECT查看,具体的语法如下:
select * from information_schema.triggers where condition;

从上面的执行结果可以得知:TRIGGER_SCHEMA表示触发器所在的数据库;TRIGGER_NAME后面是触发器的名称;EVENT_OBJECT_TABLE表示在哪个数据表上触发;ACTION_STATEMENT表示触发器触发的时候执行的具体操作;ACTION_ORIENTATION是ROW,表示在每条记录上都触发;ACTION_TIMING表示触发的时刻是AFTER;剩下的是和系统相关的信息

也可以不指定触发器名称,这样将查看所有的触发器,命令如下这个命令会显示TRIGGERS表中所有的触发器信息。:

select * from information_schema.trigger \G

12.3 触发器的使用

触发程序与表相关,当对表执行INSERT、DELETE或UPDATE语句时,将激活触发程序。可以将触发程序设置为在执行语句之前或之后激活
【例】创建一个在account表插入记录之后更新myevent数据表的触发器

create trigger trig_insert after insert on account for each row insert into myevent values(2,'after insert')

上面的代码创建了一个trig_insert触发器,在向表account插入数据之后会向表myevent插入一组数据

12.4 删除触发器

使用DROP TRIGGER语句可以删除MySQL中已经定义的触发器,删除触发器语句的基本语法格式如下:

drop trigger [schema_name.] trigger_name

其中,schema_name表示数据库名称,是可选的。如果省略了schema,将从当前数据库中舍弃触发程序;trigger_name是要删除的触发器的名称。
【例】删除一个触发器,代码如下

drop trigger test_db.ins_num;

上面的代码中test是触发器所在的数据库,ins_sum是一个触发器的名称。

MySQL学习笔记(12)—— SQL触发器:相关推荐

  1. MySQL学习笔记 05、触发器、存储过程、存储函数、定时任务

    文章目录 前言 一.触发器 提前准备测试表 1.1.创建触发器 1.2.删除触发器 二.存储过程 2.1.认识变量 2.1.1.系统变量 2.1.2.用户变量 2.2.存储过程创建 2.3.删除存储过 ...

  2. MySQL学习笔记:SQL基本语法

    文章目录 一.SQL语句简介 1.SQL语言 2.基本规范 3.注释 (1)单行注释:#和-- (2)多行注释:/* ... */ 二.MySQL基本数据类型 1.字段类型 2.字段属性 三.数据的增 ...

  3. MySQL学习笔记15:触发器

    触发器是由事件来触发某个操作,这些事件包括INSERT语句,UPDATE语句和DELETE语句 创建触发器 创建只有一个执行语句的触发器 CREATE TRIGGER 触发器名 BEFORE|AFTE ...

  4. mysql学习笔记12 其他函数

    1.概述: 举例: 查询用户 mysql> select user(); +--------------------+ | user() | +--------------------+ | r ...

  5. 献给入门小白的MySQL学习笔记+案例

    MySQL学习笔记 目录 MySQL学习笔记 1.SQL概述 1.1:数据库的好处 1.2:数据库管理系统 1.3:SQL语言概述 1.4:SQL语言的分类 2.安装与使用 2.1:MySql数据库产 ...

  6. mysql 学习笔记--存储引擎、索引、sq优化

    全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...

  7. Mysql学习笔记(基础)基础sql语句详细记录

    数据库学习(基础) // 个人网课学习记录,如果有违规等问题,请联系我删除~ mysql下载安装( 解压版安装配置 下载版安装配置 ) 需求分析:使用cmd命令来创建一个数据库,并对数据库中得一张分类 ...

  8. MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  9. Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从

    Linux学习笔记12 Linux学习笔记12 配置FTP服务 配置pure-ftpd 开机启动 上传下载文件 配置vsftpd CentOS 70安装配置Vsftp服务器 搭好vsftp之后出现55 ...

  10. MySQL 学习笔记②

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru 资料链接 ...

最新文章

  1. 03-VTK基础概念(2)
  2. Windows sever 2008
  3. UVa133 - The Dole Queue
  4. povray[1] = 天空
  5. 阿里达摩院提出新型优化方法,一行代码即可替换现有优化器
  6. 优秀博客 --敏感词汇过滤
  7. opencv学习记录【6】(codebook
  8. Unity3d学习笔记-Demo实现
  9. 《零边际成本社会》书中的精髓:零边际成本所引发的共享经济,将颠覆资本主义和社会主义。
  10. 81章 老子1章到_《道德经》81章全文,建议全文背诵,终身体悟
  11. ERNIE-ViLG文心跨模态AI绘画大模型——中文版stable-diffusion
  12. python密码密文转换_浅论Python密文输入密码的方法
  13. Linux服务器内存消耗过高解决方法
  14. git(一)不同情景下的git用法
  15. 【Spring Web教程】SpringBoot 实现一应用多端口
  16. tf.meshgrid
  17. 环境监测调查无人船OES120
  18. 4.flocking(netlogo)
  19. 地质灾害公开数据库有哪些,网址是什么
  20. 【C/C++】VS的cl命令 | 配置环境变量 | 使用命令行编译C/C++程序

热门文章

  1. 线性代数 --- 什么是矩阵的逆?(个人笔记扫描版)
  2. Freescale PowerPC系列架构 处理器 种类介绍 型号发展
  3. imageJ打不开mp4怎么办?
  4. Blender 常用快捷键记录 (二)
  5. 企业运维实践-Nginx使用geoip2模块并利用MaxMind的GeoIP2数据库实现处理不同国家或城市的访问最佳实践指南...
  6. Scintilla Documentation
  7. python tkinter:单位换算小工具完整代码
  8. matlab中面板数据格式,MATLAB空间面板数据模型操作介绍
  9. 滤波器截止频率理解?
  10. 汽车操作系统最新研究