2024 Mysql基础与进阶操作系列之MySQL触发器详解(21)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: MySQL触发器的使用场景之数据完整性约束、如何具体创建person的日志表、触发器与存储过程的对比与选择、触发器的性能和注意事项等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法

欢迎各位彦祖与热巴畅游本人专栏与博客

你的三连是我最大的动力

以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]

专栏跑道一

➡️网络空间安全——全栈前沿技术持续深入学习

image.gif

专栏跑道二

➡️ 24 Network Security -LJS

image.gif

image.gif

image.gif

专栏跑道三


➡️ MYSQL REDIS Advance operation

image.gif

专栏跑道四

➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]

image.gif

专栏跑道五

➡️RHCE-LJS[Linux高端骚操作实战篇]

image.png

专栏跑道六

➡️数据结构与算法[考研+实际工作应用+C程序设计]

image.gif

专栏跑道七

➡️RHCSA-LJS[Linux初级及进阶骚技能]

image.gif

image.gif

上节回顾





1.MySQL触发器的使用场景

1.1. 数据完整性约束

插入触发器

-- 创建一个名为 `person` 的表
CREATE TABLE `person` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,  -- 定义 id 列为整型,非空,自增
  `name` VARCHAR(100) NOT NULL,           -- 定义 name 列为可变字符型,最大长度100,非空
  `age` INT(11) NOT NULL,                 -- 定义 age 列为整型,非空
  PRIMARY KEY (`id`)                       -- 设置 id 列为主键
);
-- 更改分隔符,以便定义触发器
DELIMITER //
-- 创建一个名为 `trigger_insert_mytable` 的触发器
CREATE TRIGGER `trigger_insert_mytable` 
BEFORE INSERT ON `person`                  -- 在 `person` 表插入数据之前触发
FOR EACH ROW                                -- 对每一行插入的数据执行触发器逻辑
BEGIN
  -- 触发器逻辑部分,可以在此处编写需要执行的代码
  
  -- 示例:将插入的数据的 name 字段转换为大写
  SET NEW.name = UPPER(NEW.name);          -- 使用 UPPER 函数将新插入的 name 字段转换为全大写
END //                                      -- 结束触发器逻辑
DELIMITER ;                                 -- 恢复默认分隔符
image.gif

效果图

image.gif 编辑

image.gif 编辑

更新触发器[效果图略]:

-- 创建一个名为 trigger_name 的触发器
CREATE TRIGGER trigger_name
BEFORE UPDATE ON table_name               -- 在 table_name 表进行更新操作之前触发
FOR EACH ROW                               -- 对于每一行被更新的记录都会执行触发器逻辑
BEGIN
    -- 触发器逻辑部分
    -- 这里可以添加你需要执行的操作,例如验证数据、记录日志等
END;
image.gif

删除触发器[效果图略]:

-- 创建一个名为 trigger_name 的触发器
CREATE TRIGGER trigger_name
BEFORE DELETE ON table_name               -- 在 table_name 表进行删除操作之前触发
FOR EACH ROW                               -- 对于每一行被删除的记录都会执行触发器逻辑
BEGIN
    -- 触发器逻辑部分
    -- 可以在这里添加代码,比如记录日志、检查条件等
END;
image.gif

2. 数据变更日志的记录与追踪

2.1如何具体创建person的日志表

-- 创建一个名为 person_log 的表,用于记录人员变更日志
CREATE TABLE person_log (
  id INT(11) NOT NULL AUTO_INCREMENT,  -- 日志记录的唯一标识,自动递增
  event_type VARCHAR(50) NOT NULL,      -- 事件类型,例如 INSERT、UPDATE 等
  event_time DATETIME NOT NULL,         -- 事件发生的时间
  person_id INT(11) NOT NULL,           -- 相关人员的 ID
  person_name VARCHAR(100) NOT NULL,    -- 相关人员的姓名
  person_age INT(11) NOT NULL,          -- 相关人员的年龄
  PRIMARY KEY (id)                       -- 将 id 列设置为主键
);
-- 创建一个触发器,当在 person 表中插入新记录后执行
CREATE TRIGGER trigger_insert_person
AFTER INSERT ON person                    -- 在 person 表插入操作后触发
FOR EACH ROW                              -- 每插入一行都会执行触发器
BEGIN
    -- 记录变更日志,将插入事件的信息写入 person_log 表
    INSERT INTO person_log (event_type, event_time, person_id, person_name, person_age)
    VALUES ('INSERT', NOW(), NEW.id, NEW.name, NEW.age);  -- 使用 NEW 关键字获取新插入行的数据
END;
image.gif

效果图:

image.gif 编辑

3. 触发器与存储过程的对比与选择

触发器与存储过程的对比与选择详解说明表

触发器
  • 自动触发:
  • 触发器是与数据操作紧密关联的,当满足触发条件时自动执行,无需手动调用
  • 数据驱动:
  • 触发器通过对数据库中的特定表进行监视,对数据操作作出响应,可以在插入、更新或删除数据时执行相应的操作
  • 适用范围:
  • 适用于需要在数据操作发生时自动执行的简单逻辑,如验证、约束、日志记录等。触发器通常较轻量级,用于处理特定表上的少量逻辑
存储过程
  • 手动调用:
  • 存储过程是一段可由应用程序手动调用的代码块,需要显式调用才能执行
  • 逻辑复杂性:
  • 存储过程适用于较为复杂的业务逻辑,可以包含条件判断、循环、事务控制等复杂逻辑结构
  • 参数和返回值:
  • 存储过程可以接受参数和返回结果,使其更加灵活和可配置,适合处理多样化的业务需求
  • 应用层控制:
  • 存储过程通常由应用程序来调用和管理,可以作为一个整体被多个应用程序共享和复用
选择
  • 触发器
  • 适合在数据库层面上处理与数据操作紧密相关的简单逻辑。对于无需手动干预、并且随着数据操作自动执行的逻辑,触发器是一个好的选择
  • 存储过程
  • 适合处理较为复杂的业务逻辑,需要手动控制执行时机,并且可能需要参数传递和结果返回的情况

4.触发器的性能和注意事项

触发器的性能和注意事项详解说明表

性能影响
  • 触发器会在每次受影响的行上执行操作。如果触发器逻辑复杂或在大量数据插入时使用触发器,可能会对性能产生负面影响。

  • 因此,在编写触发器时,应尽量保持逻辑简洁,并评估其对性能的影响
死锁风险
  • 触发器可能引发死锁问题,特别是在涉及多个表之间的触发器操作时。

  • 确保在触发器中避免无限循环或引发额外的锁定操作,以防止死锁发生
触发器顺序
  • 如果数据库中存在多个触发器,触发器的执行顺序可能会影响结果。

  • 要确保触发器的执行顺序符合预期,可以使用CREATE TRIGGER语句的BEFOREAFTER关键字进行调整
触发器的影响范围
  • 触发器是与表相关联的,且在表上的特定操作(例如插入、更新和删除)时触发。

  • 请确保了解触发器的触发条件和适用范围,以免意外触发或未触发触发器
权限
  • 创建和管理触发器需要适当的权限。

  • 确保对数据库和表具有足够的权限来创建和执行触发器
调试和测试
  • 在编写和使用触发器之前,进行充分的调试和测试是非常重要的。

  • 确保触发器的逻辑正确,并验证其与其他操作的交互是否符合预期

 


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MYSQL日志之详解如何配置查看二进制、查询及慢查询日志;备份与恢复等具体详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
2024Mysql And Redis基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
|
1月前
|
存储 SQL NoSQL
|
1月前
|
NoSQL 关系型数据库 MySQL
2024 RedisAnd Mysql基础与进阶操作系列(19)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis应用场景之取最新N个数据的操作、精准设定过期时间、计数器应用、Uniq操作,获取某段时间所有数据排重值、Pub/Sub构建实时消息系统等保姆式具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
存储 SQL NoSQL
2024Mysql And Redis基础与进阶操作系列(10)作者——LJS[你个IKUN还学不会嘛?你是真爱粉嘛?真是的 ~;以后别侮辱我家鸽鸽]
Mysql And Redis基础与进阶操作系列之存储函数和MySQL 触发器等具体举例以及详解步骤;注意点及常见报错问题所对应的解决方法]
|
1月前
|
NoSQL 关系型数据库 MySQL
2024Mysql And Redis基础与进阶操作系列(8)作者——LJS[含MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;注意点及常见报错问题所对应的解决方法]
MySQL 创建、修改、跟新、重命名、删除视图等具体详步骤;举例说明注意点及常见报错问题所对应的解决方法
|
1天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
21天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1
|
23天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
36 4
|
2月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
66 3
Mysql(4)—数据库索引
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
170 1

相关产品

  • 云数据库 RDS MySQL 版