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

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.xdnf.cn/news/6899.html

相关文章:

  • day016-系统负载压力测试-磁盘管理
  • 应用层自定义协议与序列化
  • 毛泽东(井冈山)词三篇
  • 英语学习5.17
  • 电子电路:到底该怎么理解电容器的“通交流阻直流”?
  • 高频面试题(含笔试高频算法整理)基本总结回顾120
  • Conda 完全指南:从环境管理到工具集成
  • 飞帆控件 post or get it when it has get
  • FastMCP:为大语言模型构建强大的上下文和工具服务
  • C++类与对象--1 特性一:封装
  • vue.js 更新数据时,出现数据更新,界面没有更新的情况【普通对象,不包含数组】
  • NBA足球赛事直播源码体育直播M33模板赛事源码
  • B站锁定三倍速(自用)
  • Dubbo:Docker部署Zookeeper、Dubbo Admin的详细教程和SpringBoot整合Dubbo的实战与演练
  • gem5-gpu教程 第十章 关于topology 的Mesh network
  • USB基础知识
  • Selenium测试框架快速搭建
  • 多模态学习( 二 )——Token与Embedding的区别:从文本到向量空间的旅程
  • 手动实现 Transformer 模型
  • QT+EtherCAT 主站协议库—SOEM主站
  • 什么是差分传输?
  • 免费代理IP服务有哪些隐患?如何安全使用?
  • 智力题整理汇总版
  • 高频面试题(含笔试高频算法整理)基本总结回顾61
  • 浅谈前端架构设计与工程化
  • 【降维】t-SNE
  • 腾讯 CodeBuddy 杀入 AI 编程赛道,能否撼动海外工具霸主地位?
  • 力扣-283-移动零
  • 中文分词与数据可视化01
  • 板对板连接器极限测试:振动、温差与盐雾三重挑战下的生存实录