网站首页 > 技术文章 正文
测试环境
mysql-5.7.20-log,win10
什么是触发器
触发器可以简单理解一种特殊的存储过程,之前存储过程的变量定义及流程语句同样适合触发器,唯一不同的是我们只需要定义触发器,而不用手动调用触发器。从事件触发的角度来说,触发器编写的过程就是触发事件定义的过程,因为触发器定义好后会随着数据库操作命令的执行而触发,这些具体的操作是INSERT/UPDATE/DELETE。
语法: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW BEGIN trigger_stmt ENDsh 释义: trigger_name:触发器名称,用户自行指定; trigger_time:触发时机,取值为 BEFORE 或 AFTER; trigger_event:触发事件,取值为 INSERT、UPDATE 或 DELETE;需要注意的是这些操作命令并不一定严格意义上的命令,因为像 LOAD DATA 和 REPLACE 语句也能触发上述事件。LOAD DATA 语句用于将一个文件装入到一个数据表中,是一系列的 INSERT 操作。REPLACE 语句类似INSERT 语句,当表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时,会先删除原来的数据,然后增加一条新数据,也就是说,一条 REPLACE 语句会等价于一条INSERT 语句或者一条 DELETE 语句和上一条 INSERT 语句。 tbl_name:表示在哪张表上建立触发器; trigger_stmt:触发器程序体,可以是一句SQL语句或者流程语句 FOR EACH ROW : 在mysql中属于固定写法,指明触发器以行作为执行单位,也就是当用户执行删除命令删除3条数据,与删除动作相关的触发器也会被执行3次。
创建触发器
1.准备2张表
2.给user表创建触发器,删除完user的一条记录就往user_history中插入删掉的数据
触发器创建前请先使用DELIMITER //进行转换,图示中并没有进行表明
注意: 上述sql中创建语句的形式与前面的存储过程或者存储函数都很类似,这里有点要注意的是,使用OLD/NEW关键字可以获取数据变更前后的记录,其中OLD用于AFTER时刻,而NEW用于BEFORE时刻的变更。如OLD.name表示从user表删除的记录的名称。INSERT操作一般使用NEW关键字,UPDATE操作一般使用NEW和OLD,而DELETE操作一般使用OLD。
查看触发器
删除触发器
DROP TRIGGER 触发器名称
下面给大家带来mysql中游标的使用及原理详解。谢谢大家的更专注与支持
猜你喜欢
- 2024-09-23 (二)SQL数据模式、表、索引的建立与删除
- 2024-09-23 当我们输入一条SQL查询语句时,发生了什么?
- 2024-09-23 超详细!SQL语法速成就靠这篇了!(下)
- 2024-09-23 sql语句(sql语句增删改查)
- 2024-09-23 数据库触发器(数据库触发器的创建和使用)
- 2024-09-23 SQL创建触发器(sql创建触发器禁止修改成绩)
- 2024-09-23 MySQL_08_触发器(mysql触发器的使用及语法)
- 2024-09-23 被低估的SQL(被低估的中国半导体龙头)
- 2024-09-23 都2021年了不会还有人不会用SQL吧
- 2024-09-23 Navicat工具中“清空表”与“截断表”区别,望文生义惹的祸
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 573℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 513℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃启用MySQL查询缓存(mysql8.0查询缓存)
- 469℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 449℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 447℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)