欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 详细分析Mysql触发器的基本使用(图文解析)

详细分析Mysql触发器的基本使用(图文解析)

2025/9/23 9:05:07 来源:https://blog.csdn.net/weixin_47872288/article/details/139566512  浏览:    关键词:详细分析Mysql触发器的基本使用(图文解析)

目录

  • 前言
  • 1. 基本知识
  • 2. 创建触发器
  • 3. 查询触发器
  • 4. 更新触发器
  • 5. Demo

前言

对于维护数据的完整性,如果擅长Java,推荐阅读这篇文章:

1. 基本知识

触发器(Trigger)是数据库的一种特殊存储过程,当某个特定事件在特定表上发生时,触发器会自动执行

触发器在维护数据的完整性、实现复杂的业务规则以及监控数据库活动方面非常有用

基本的概念如下:

  • 触发事件:触响应的数据库操作,如 INSERT、UPDATE 或 DELETE
  • 触发时间:可以是 BEFORE(操作前)或 AFTER(操作后)
  • 触发操作:执行的SQL语句或逻辑块(如 BEGIN…END 块)

触发器的限制和注意事项

  • 触发器不能调用另一触发器:在MySQL中,一个触发器的执行不会触发另一个触发器
  • 性能影响:触发器会在每次符合条件的事件发生时执行,因此可能对性能产生影响,尤其是在高频操作的表上
  • 调试:由于触发器的执行是隐式的,因此调试触发器可能比较困难。建议在触发器中加入日志记录语句来辅助调试
  • 事务处理:触发器通常会在事务内执行,因此如果事务回滚,触发器的操作也会回滚

触发器的实际应用场景

  • 数据审计:使用触发器记录数据的变化,例如在表中记录每次插入、更新和删除操作
  • 数据完整性:确保业务规则的执行,例如防止负库存或无效数据的插入
  • 自动计算:在数据插入或更新时自动计算相关字段的值,例如自动更新订单的总金额

对于数据库

2. 创建触发器

基本的创建触发器语法如下:

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
BEGIN-- 触发器逻辑
END;

对应创建一个manong表,创建一个在插入数据之前更新 created_at 字段的触发器:

CREATE TABLE manong (id INT PRIMARY KEY,name VARCHAR(100),created_at TIMESTAMP
);DELIMITER //CREATE TRIGGER before_manong_insert
BEFORE INSERT ON manong 
FOR EACH ROW
BEGINSET NEW.created_at = NOW();
END//DELIMITER ;

截图如下:

在这里插入图片描述

3. 查询触发器

这三者的命令差不多

如果在数据库中了,可直接使用:SHOW TRIGGERS;

在这里插入图片描述

如果未在数据库中,需要指明数据库名:SHOW TRIGGERS FROM your_database_name;

在这里插入图片描述

还可以通过触发器名字来查询:show create trigger your_trigger_name;
在这里插入图片描述

还可直接使用information_schema.TRIGGERS 表这样查询:

SELECT TRIGGER_NAME,EVENT_MANIPULATION,EVENT_OBJECT_TABLE,ACTION_STATEMENT,ACTION_TIMING,CREATED,SQL_MODE,DEFINER
FROM information_schema.TRIGGERS
WHERE TRIGGER_SCHEMA = 'your_database_name';

截图如下:

在这里插入图片描述

注意TRIGGER_SCHEMA 应该用单引号引用

对应的参数说明如下:

  • TRIGGER_NAME:名称
  • EVENT_MANIPULATION: 事件(INSERT, UPDATE, DELETE)
  • EVENT_OBJECT_TABLE:作用的表
  • ACTION_STATEMENT: 执行的SQL语句
  • ACTION_TIMING:触发时间(BEFORE, AFTER)
  • CREATED:创建时间
  • SQL_MODE:创建时的SQL模式
  • DEFINER:定义者

4. 更新触发器

在MySQL中,触发器不能直接更新

需要修改触发器,必须先删除旧的触发器,然后创建一个新的触发器

删除的基本语法如下:DROP TRIGGER [IF EXISTS] trigger_name;
截图如下:

在这里插入图片描述

重新创建一个新的触发器:

DELIMITER //CREATE TRIGGER before_yanjiuseng_insert
BEFORE INSERT ON manong
FOR EACH ROW
BEGINSET NEW.created_at = NOW();-- 新增逻辑,例如:记录插入操作日志
END//DELIMITER ;

截图如下:

在这里插入图片描述

5. Demo

根据以上的示例,测试对应是否可自动补充属性

原表格如下:

在这里插入图片描述

先完善表格,基于id自增以及主键

```sql
ALTER TABLE manong DROP PRIMARY KEY; -- 删除原有的主键约束ALTER TABLE manong MODIFY COLUMN id INT AUTO_INCREMENT PRIMARY KEY; -- 修改 id 字段为自增主键INSERT INTO manong (name) VALUES ('ma');
INSERT INTO manong (name) VALUES ('nong');
INSERT INTO manong (name) VALUES ('yanjiuseng');

截图如下:

在这里插入图片描述

再次查看对应的属性:

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词