广告
返回顶部
首页 > 资讯 > 数据库 >【MySQL】MySQL触发器入门宝典,助力MySQL初学者打下基本功
  • 630
分享到

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

mysql数据库 2023-08-17 06:08:20 630人浏览 独家记忆
摘要

🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:重温M

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:重温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_numberBEFORE INSERT ON orderFOR EACH ROWBEGIN    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_timeAFTER UPDATE ON articleFOR EACH ROWBEGIN    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_infoBEFORE DELETE ON userFOR EACH ROWBEGIN    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//查看已创建的触发器列表

🌟写在最后

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


请添加图片描述

来源地址:https://blog.csdn.net/2302_79094329/article/details/131824078

您可能感兴趣的文档:

--结束END--

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

本文链接: https://www.lsjlt.com/news/372402.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作