【MySQL】MySQL触发器入门宝典,助力MySQL初学者打下基本功

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【MySQL】MySQL触发器入门宝典,助力MySQL初学者打下基本功

🌟前言


在MySQL数据库中,大家都听过触发器。对于MySQL初学者而言,理解触发器的概念和应用是非常重要的。本文主要面向初学者学习MySQL触发器。


🌟触发器介绍


定义:MySQL触发器是一种数据库对象,它在指定的数据库事件(例如插入、更新或删除数据)发生时自动执行预定义的操作。触发器由两个主要组成部分组成:事件和触发操作。


  • 事件:希望触发器响应的数据库操作。例如,当有数据插入到表中,或者当数据被更新或删除时,我们可以定义相应的事件。
  • 触发操作:在事件发生时触发的操作,可以是一条或多条SQL语句。触发操作可以用来实现复杂的业务逻辑、数据完整性约束和审计跟踪等需求。


例子:假设我们现在要举行一个Party,当每个Party成员开门进入到Party房间时,房间里的机器就会自动说:欢迎光临Party。在这个例子中,开门是事件,而自动说欢迎词是触发操作。通过此例子我们可以定义一个触发器,当“门打开时,自动说欢迎词”。


应用:

  • 电子商务网站:使用触发器来实现订单状态的更新、库存的自动调整等功能。
  • 博客系统:使用触发器记录每篇文章的浏览次数或者自动发布评论等功能。


类型:


触发器类型 描述
BEFORE触发器 在事件之前执行操作,例如验证数据的有效性或进行预处理操作。
AFTER触发器 在事件之后执行操作,例如自动更新其他相关数据或记录日志。
INSTEAD OF触发器 替代原始事件的执行,例如将数据插入到视图中而不是实际表。


事件种类

触发器事件 描述
INSERT事件 在向表中插入一条记录时触发触发器。
UPDATE事件 在修改表中的一条或多条记录时触发触发器。
DELETE事件 在从表中删除一条或多条记录时触发触发器。


🌟触发器操作


以下操作中的例子都是基于以下两张表进行。


创建触发器


语法

CREATE TRIGGER trigger_name
    {BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE}
    ON table_name
    FOR EACH ROW
    BEGIN
        -- 执行语句
    END;


  • trigger_name:触发器名称。
  • table_name:表名。
  • FOR EACH ROW:表示触发器会为每一行记录执行操作。
  • BEGIN和END之间:触发器的执行语句。


BEFORE INSERT 触发器


假设我们有一个订单表(order),需要在插入新订单之前自动生成订单号。可以创建一个 BEFORE INSERT 触发器来实现这一功能。


CREATE TABLE order (
    id INT PRIMARY KEY AUTO_INCREMENT,
    order_number VARCHAR(10),
    order_name VARCHAR(30)
);
CREATE TRIGGER generate_order_number
BEFORE INSERT ON order
FOR EACH ROW
BEGIN
    SET NEW.order_number = CONCAT('ORD', LPAD(NEW.id, 6, '0'));
END;

解释:触发器名为generate_order_number,它会在每次向订单表(order)插入新记录之前触发。FOR EACH ROW表示触发器对每一行进行操作。触发器内部的逻辑(BEGIN与END之间)是将新订单的订单号(NEW.order_number)设置为’ORD’加上新订单的ID(NEW.id),并使用LPAD函数将ID补零至6位数。


AFTER UPDATE 触发器


假设我们有一个文章表(article),需要在更新文章内容后自动记录修改时间。可以创建一个 AFTER UPDATE 触发器来实现这一功能。


CREATE TABLE article (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100),
    content TEXT,
    modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TRIGGER update_modified_time
AFTER UPDATE ON article
FOR EACH ROW
BEGIN
    UPDATE article SET modified_at = CURRENT_TIMESTAMP WHERE id = OLD.id;
END;

解释:触发器名为update_modified_time,它会在每次对文章表(article)进行更新操作之后触发。FOR EACH ROW表示触发器对每一行进行操作。触发器内部的逻辑是将被更新的文章(OLD.id)的修改时间(modified_at)设置为当前时间(CURRENT_TIMESTAMP)。


BEFORE DELETE 触发器


假设我们有一个用户表(user),需要在删除用户之前自动备份用户信息。可以创建一个 BEFORE DELETE 触发器来实现这一功能。


CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50),
    ...
);
CREATE TABLE user_backup (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50),
    backup_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    ...
);
CREATE TRIGGER backup_user_info
BEFORE DELETE ON user
FOR EACH ROW
BEGIN
    INSERT INTO user_backup (username) VALUES (OLD.username);
END;

解释:触发器名为backup_user_info,它会在每次删除用户表(user)中的记录之前触发。FOR EACH ROW表示触发器对每一行进行操作。触发器内部的逻辑是将被删除的用户的用户名(OLD.username)插入到用户备份表(user_backup)中,并记录备份时间(backup_time)为当前时间(CURRENT_TIMESTAMP)。


删除触发器


语法DROP TRIGGER IF EXISTS trigger_name;

例子:假设我们要删除名称为calculate_total_amount的触发器。

DROP TRIGGER IF EXISTS calculate_total_amount;


查看触发器


语法SHOW TRIGGERS

SHOW TRIGGERS//查看已创建的触发器列表


🌟写在最后


最后感谢大家对于此博文的阅读,如对此内容有补充或者有疑问的地方,还望大家在评论区积极讨论。不懂得同学也可以私信留言,再一次感谢大家!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
3月前
|
关系型数据库 MySQL 数据库
MySQL基本操作入门指南
MySQL基本操作入门指南
107 0
|
1月前
|
存储 安全 关系型数据库
2024 Mysql基础与进阶操作系列之MySQL触发器详解(21)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
MySQL触发器的使用场景之数据完整性约束、如何具体创建person的日志表、触发器与存储过程的对比与选择、触发器的性能和注意事项等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
3月前
|
SQL 关系型数据库 MySQL
MySQL入门到精通
MySQL入门到精通
|
4月前
|
存储 关系型数据库 MySQL
MySQL 中的触发器数量之谜
【8月更文挑战第31天】
45 0
|
4月前
|
SQL 数据采集 关系型数据库
|
5月前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
71 0
「Python入门」python操作MySQL和SqlServer
|
5月前
|
存储 SQL 关系型数据库
(十四)全解MySQL之各方位事无巨细的剖析存储过程与触发器!
前面的MySQL系列章节中,一直在反复讲述MySQL一些偏理论、底层的知识,很少有涉及到实用技巧的分享,而在本章中则会阐述MySQL一个特别实用的功能,即MySQL的存储过程和触发器。
106 0
|
5月前
|
存储 SQL 数据库
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
MySQL设计规约问题之为什么要避免使用存储过程、触发器和函数
|
5月前
|
存储 关系型数据库 MySQL
MySQL小白教程:从入门到查询高手
MySQL小白教程:从入门到查询高手