优秀的编程知识分享平台

网站首页 > 技术文章 正文

Mysql高级进阶——触发器(mysql触发器的使用及语法)

nanyue 2024-09-23 10:43:52 技术文章 4 ℃

测试环境

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中游标的使用及原理详解。谢谢大家的更专注与支持

最近发表
标签列表