0


【MySQL】MySQL触发器原理与实战(MySQL专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

🏆 CSDN博客专家 | CSDN后端领域优质创作者 | CSDN内容合伙人 | 2022博客之星

🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~


🍅 文末获取联系 🍅 👇🏻 精彩专栏推荐订阅收藏 👇🏻

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通
全面讲解MySQL知识与企业级MySQL实战
🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

本文目录

本文导读

本文讲解触发器基本概念与原理,包括什么是触发器、触发器与存储过程异同、触发器的特性、优缺点和实际应用。第二节讲解MySQL触发器实战,包括创建、查看、MySQL修改和删除触发器,最后讲解MySQL支持的触发器类型触发器类型NEW和OLD的使用。

一、触发器基本概念与原理

1、什么是触发器

触发器是一种特殊的存储过程(主要用于保护表中的数据),当SQL试图更改受触发器保护的数据时,触发器会自动执行。特别是,当存在多个彼此相关的表时,触发器可以使不同的表保持数据一致性。

在MySQL中,触发器只能在执行 INSERT、DELETE 和 UPDATE 操作时激活。其他SQL语句不会激活触发器。

2、触发器与存储过程异同

MySQL触发器与存储过程(触发器是特殊的存储过程)一样,是完成特定功能并存储在数据库服务器上的SQL片段,它们都是在MySQL中管理数据的工具。

不同之处在于,存储过程的执行需要使用CALL语句来调用SQL段,而触发器的执行不需要使用CALL语句来CALL,也不需要手动启动。相反,当对数据库表中的数据执行DML操作时,SQL段的执行将自动触发,而无需手动调用。例如当学生表被操作(INSERT、DELETE或UPDATE)时,它将被激活以执行。

别名OLD和NEW用于引用触发器中已更改的记录内容,触发器只支持行级触发,不支持语句级触发。

3、触发器的特性

1、触发条件? INSERT、UPDATE和DELETE
2、何时触发? 添加、删除或修改之前或之后
3、触发频率? 每行执行一次
4、触发器都是定义并将其附加到表上

4、触发器的优缺点

优点:

触发器可以自动执行。它们在触发器相关表中的数据被相应修改后立即执行。
触发器可以实现比 FOREIGN KEY 约束、CHECK 约束更复杂的检查和操作。
触发器可以实现表数据的级联更改,并保证数据的完整性。

缺点:

当SQL出现问题时,使用触发器实现的业务逻辑很难定位,特别是当涉及多个触发器。
大量使用触发器导致代码结构被破坏。
如果要更改的数据量很大,则触发器的执行效率非常低。

5、触发器的实际应用

触发器的这一特性有助于确保数据库端的数据完整性日志记录数据验证等操作。

例如,在开发项目时,数据表更改时,都需要自动处理(统计总数),此时可以使用触发器来处理 。

二、MySQL触发器实战

1、创建MySQL触发器

MySQL使用 CREATE TRIGGER 语句创建触发器,BEFORE和AFTER,表示触发触发器的时间是在激活它的语句之前或之后触发的。

如果要验证新数据是否满足条件,使用 BEFORE 选项;如果要在激活触发器的语句执行后完成几个或多个更改,通常使用 AFTER 选项。

CREATE TRIGGER  触发器名 before|after 
触发事件(<INSERT | UPDATE | DELETE >)
ON <表名> FOR EACH Row 执行语句(<触发器主体>);

-- 例如:当***表执行了insert 之后,触发器则会自动在user_log添加日志记录
create trigger trigger_name after 
insert 
on user for each row
insert into user_logs values(NULL,now(),'new');

2、查看MySQL触发器

查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息。MySQL中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库的查询 triggers 数据表。

-- SHOW TRIGGERS语句查看触发器信息
SHOW TRIGGERS;

-- 在triggers表中查看触发器信息
-- 所有触发器的信息都存在 information_schema 数据库的 triggers 表中
SELECT * FROM information_schema.triggers WHERE trigger_name= '触发器名';

3、修改和删除MySQL触发器

使用 DROP 语句将触发器从数据库中删除,DROP TRIGGER 语句需要 SUPER 权限,要修改触发器,必须删除原始触发器并创建一个同名的新触发器。

-- 使用 DROP 语句将触发器从数据库中删除
-- DROP TRIGGER 语句需要 SUPER 权限
-- IF EXISTS:避免在没有触发器的情况下删除触发器
DROP TRIGGER [ IF EXISTS ] [数据库名] <要删除的触发器名称>

-- 删除上一节中创建的触发器
DROP TRIGGER trigger_name;

三、MySQL支持的触发器类型

1、触发器类型NEW和OLD的使用

MySQL定义了NEW和OLD,用于表示触发器所在表中触发了触发器的哪一行数据,并引用触发器中更改的记录内容

INSERT 类型触发器:NEW表示要添加或已添加的数据

UPDATE 类型触发器:OLD表示修改前的数据,NEW表示要修改或已经修改的数据

DELETE 类型触发器:OLD表示要删除或已删除的数据

2、INSERT 触发器

在INSERT语句执行之前或之后响应的触发器。

使用INSERT触发器时应注意,在INSERT触发器代码中,可以引用名为NEW(不区分大小写)的虚拟表来访问插入的行。

在 BEFORE INSERT 触发器中,也可以更新NEW中的值,即允许更改插入的值。

在AUTO_INCREMENT 列中,NEW在执行INSERT之前包含 0值,在执行INSERT之后将包含一个新的自动生成的值。

3、UPDATE 触发器

在执行UPDATE语句之前或之后响应的触发器。

使用UPDATE触发器时应注意,在UPDATE触发器代码中,可以引用名为NEW(不区分大小写)的虚拟表来访问更新的值。

在UPDATE触发器代码中,可以在执行UPDATE语句之前引用名为OLD(不区分大小写)的虚拟表来访问值,OLD中的所有值都是只读的,无法更新。

在BEFORE UPDATE触发器中,也可以更新NEW中的值,也就是说,允许更改UPDATE语句中使用的值(只要您具有相应的操作权限)。

UPDATE触发器,只能使用BEFORE类型的触发器,不允许使用AFTER类型的触发器。

4、DELETE 触发器

在执行DELETE语句之前或之后响应的触发器。

使用DELETE触发器时应注意,在DELETE触发器代码中,可以引用名为OLD(不区分大小写)的虚拟表来访问删除的行,同样与UPDATE触发器一样,OLD中的所有值都是只读的,无法更新。

总结

本文讲解触发器基本概念与原理,包括什么是触发器、触发器与存储过程异同、触发器的特性、优缺点和实际应用。第二节讲解MySQL触发器实战,包括创建、查看、MySQL修改和删除触发器,最后讲解MySQL支持的触发器类型触发器类型NEW和OLD的使用。


本文转载自: https://blog.csdn.net/FMC_WBL/article/details/128539290
版权归原作者 小明java问道之路 所有, 如有侵权,请联系我们删除。

“【MySQL】MySQL触发器原理与实战(MySQL专栏启动)”的评论:

还没有评论