当前位置: 首页 > article >正文

Mysql触发器(附案例)

文章目录

  • 触发器简介
  • 1、insert类型
  • 2、update类型
  • 3、delete类型
  • 总结

触发器简介

触发器是与表有关的数据库对象,指定在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。

使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。

在这里插入图片描述

前置准备:

主表,tb_user_pro表结构与数据如下:
在这里插入图片描述

日志表

-- 准备工作 : 日志表 user_logs
create table user_logs(id int(11) not null auto_increment,operation varchar(20) not null comment '操作类型, insert/update/delete',operate_time datetime not null comment '操作时间',operate_id int(11) not null comment '操作的ID',operate_params varchar(500) comment '操作参数',primary key (`id`)
)engine=innodb default charset=utf8;

下面从三个语句类型(insert/update/delete)进行操作

1、insert类型

-- 插入数据触发器-- after: 在插入语句后执行
-- each row: 为行级触发器 
-- on后面: 监控的表的名字
create trigger tb_user_insert_triggerafter insert on tb_user_pro for each row
-- 编写触发器逻辑
begin insert into user_logs(id, operation, operation_time, operate_id, operate_params) VALUES(null, 'insert', now(), new.id, CONCAT('插入数据内容为:id=', new.id, ', name=', new.name2, ', gender=', new.gender));end;-- 查看触发器
show triggers;

查看结果:
在这里插入图片描述
删除触发器:

-- 删除触发器
drop trigger tb_user_insert_trigger

我们对主表执行插入操作:

insert into tb_user_pro(name2, gender) values ('小王', '男');

在这里插入图片描述

看触发器是否向我们的日志表插入了数据,执行结果:
在这里插入图片描述
结果执行成功

2、update类型

这里和上面就很类似了,直接用例子来看:

-- 更新数据触发器-- after: 在插入语句后执行
-- each row: 为行级触发器 
-- on后面: 监控的表的名字
create trigger tb_user_update_triggerafter update on tb_user_pro for each row
-- 编写触发器逻辑
begin insert into user_logs(id, operation, operate_time, operate_id, operate_params) VALUES(null, 'update', now(), new.id, CONCAT('更新前数据内容为:id=', old.id, ', name=', old.name2, ', gender=', old.gender, ' | 更新后数据内容为:id=', new.id, ', name=', new.name2, ', gender=', new.gender));
end;-- 查看触发器
show triggers;-- 删除触发器
drop trigger tb_user_update_trigger

触发器创建成功:
在这里插入图片描述
对主表执行更新语句:

-- 执行更新操作
update tb_user_pro set gender='女' where id = 5;

tb_user_pro表更新后的数据:
在这里插入图片描述

日志表数据:
在这里插入图片描述

3、delete类型

-- 删除数据触发器-- after: 在插入语句后执行
-- each row: 为行级触发器 
-- on后面: 监控的表的名字
create trigger tb_user_delete_triggerafter delete on tb_user_pro for each row
-- 编写触发器逻辑
begin insert into user_logs(id, operation, operate_time, operate_id, operate_params) VALUES(null, 'delete', now(), old.id, CONCAT('删除前数据内容为:id=', old.id, ', name=', old.name2, ', gender=', old.gender));
end;-- 查看触发器
show triggers;-- 删除触发器
drop trigger tb_user_delete_trigger

查看触发器:
在这里插入图片描述

对tb_user_pro执行删除操作:

-- 执行删除操作
delete from tb_user_pro where id = 5;

日志表:
在这里插入图片描述

总结

总的来说,触发器就是通过监控一个主表对应类型的操作,随后定义在其执行对应类型操作的时候要执行的一些逻辑,本文案例的逻辑就是插入日志表一些数据。

http://www.lryc.cn/news/2378291.html

相关文章:

  • 使用DDR4控制器实现多通道数据读写(十二)
  • Kafka 生产者工作流程详解
  • 完整卸载 Fabric Manager 的方法
  • 地下停车场调频广播无线覆盖系统:融合精准选频光纤传输均匀覆盖于一体的创新型地下车库广播无线覆盖平台
  • 【Linux】进程间通信(一):认识管道
  • 中大型水闸安全监测系统解决方案
  • 蓝桥杯12届国B 123
  • Harmony开发 List、Grid拖动自定义排序实现
  • 迅龙3号基于兆讯MH22D3适配CST328多点触摸驱动开发笔记
  • 【001】.so文件分析之 ELF格式符号
  • QT之LayOut布局
  • 无需配置光猫,使用网管交换机配合路由器的IPTV功能实现单线复用
  • C++类与对象--1 特性一:封装
  • Linux:计算机的层状结构
  • 【SpringBoot】关于MP使用中配置了数据库表前缀的问题
  • AI 赋能防艾宣传:从创意到实践,我的 IP 形象设计之旅
  • Redis 事务与管道:原理、区别与应用实践
  • 每日算法刷题Day9 5.17:leetcode定长滑动窗口3道题,用时1h
  • 手机打电话时如何将通话对方的声音在手机上识别成文字
  • 重排序模型解读:gte-multilingual-reranker-base 首个GTE系列重排模型诞生
  • C++学习:六个月从基础到就业——C++11/14:列表初始化
  • SQL语句执行问题
  • 2025系统架构师---选择题知识点(押题)
  • flutter flutter run 运行项目卡在Running Gradle task ‘assembleDebug‘...
  • P5682 [CSP-J2019 江西] 次大值
  • Elasticsearch 性能优化面试宝典
  • 【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2
  • 无监督学习在医疗AI领域的前沿:多模态整合、疾病亚型发现与异常检测
  • 计算机操作系统概要
  • C语言进阶-数组和函数