mysql 触发器进入历史

一、触发器

MySQL 触发器(Triggers)是一种数据库对象,它与表关联,能在特定的事件(如插入、更新或删除)发生时自动执行一些指定的操作。使用触发器可以帮助我们自动维护数据库的完整性、一致性,或者同步更新数据库中的相关数据。当涉及到将数据变更记录到历史表中时,触发器特别有用。

在 INSERT、UPDATE、DELETE 操作之前或之后触发并执行触发器中定义的 SQL 语句。
在这里插入图片描述

创建触发器以记录历史
假设我们有一个名为 employees 的表,我们想要记录每次对这个表进行的修改(更新或删除操作)到一个名为 employees_history 的历史表中。以下是如何设置这样的触发器的步骤:

‌创建历史表‌:

首先,你需要有一个地方来存储历史记录。这个表通常包含原表的所有相关字段,以及额外的字段来存储变更的时间戳和操作类型(比如是更新还是删除)。

CREATE TABLE employees_history (id INT AUTO_INCREMENT PRIMARY KEY,employee_id INT,name VARCHAR(100),position VARCHAR(100),salary DECIMAL(10, 2),changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,action VARCHAR(10)
);

二、创建触发器‌

然后,你需要为 employees 表创建一个触发器,用于在更新或删除记录时将旧的数据复制到 employees_history 表中。

1‌、更新操作的触发器‌:

CREATE TRIGGER before_employee_update
BEFORE UPDATE ON employees
FOR EACH ROW
BEGININSERT INTO employees_history (employee_id, name, position, salary, action)VALUES (OLD.id, OLD.name, OLD.position, OLD.salary, 'UPDATE');
END;

2‌、删除操作的触发器‌:

CREATE TRIGGER before_employee_delete
BEFORE DELETE ON employees
FOR EACH ROW
BEGININSERT INTO employees_history (employee_id, name, position, salary, action)VALUES (OLD.id, OLD.name, OLD.position, OLD.salary, 'DELETE');
END;

3‌、创建AFTER INSERT触发器‌:

CREATE TRIGGER after_employee_insert
AFTER INSERT ON employees
FOR EACH ROW
BEGININSERT INTO employees_audit (employee_id, name, position, salary, action)VALUES (NEW.id, NEW.name, NEW.position, NEW.salary, 'INSERT');
END;

在这个例子中,after_employee_insert触发器会在每次向employees表插入新记录后被触发。触发器会使用NEW关键字来访问新插入的记录的值,并将这些值插入到employees_audit表中,同时记录下操作类型为’INSERT’。

4、查看触发器的状态、语法等信息

SHOW TRIGGERS;

5、删除触发器,如果没有指定 schema_name,默认为当前数据库

DROP TRIGGER [schema_name.]trigger_name;

三、注意事项

‌性能‌:触发器的执行会增加数据库操作的开销,尤其是在高频率更新或删除的场景下。确保评估触发器对性能的影响。

‌事务处理‌:如果原始操作在事务中回滚,触发器中执行的操作也会回滚。

‌权限‌:创建触发器需要特定的权限,确保你的数据库用户账户有足够的权限来创建触发器。

‌触发时机‌:你可以选择触发器在操作之前(BEFORE)还是之后(AFTER)触发。对于记录历史而言,BEFORE 触发器通常更合适,因为它允许你访问旧值(OLD)。

通过以上步骤,你可以设置一个简单但有效的系统来自动记录数据库表的历史变更。这对于审计、数据恢复或简单的变更跟踪都非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot项目搭建(8)-用户登出与个人中心修改

1.提要信息 1.1 catch和then方法 then和catch是JavaScript中Promise对象的两个方法,用于处理异步操作的成功(成功回调)和失败(失败回调)情况。这两个方法通常与async/await语法一起使用,但也可以单独使用…

【2024】使用Docker搭建redis sentinel哨兵模式集群全流程(包含部署、测试、错误点指正以及直接部署)

目录💻 前言**Docker Compose介绍**最终实现效果 一、搭建集群1、创建文件结构2、创建redis节点3、验证节点4、创建sentinel哨兵5、验证Sentinel功能 二、spring连接1、添加依赖2、添加配置3、启动测试 三、直接部署流程1、拉取配置2、修改端口创建 前言 本篇文章主…

Python毕业设计选题:基于django+vue的智慧社区可视化平台的设计与实现+spider

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 养老机构管理 业主管理 社区安防管理 社区设施管理 车位…

webpack 项目访问静态资源

使用 webpack dev serve 启动 react 项目后,发现无法使用 http://localhost:8080/1.png 访问到项目的 /static 目录下的 1.png 文件。我的 webpack-dev.js 配置如下: const webpack require(webpack) const webpackMerge require(webpack-merge) cons…

【FAQ】使用Node.js 镜像 构建本地项目

在nodejs官方并没有提供使用node.js构建本地项目的方法,但是通过阅读官方文档,可以发现,官方在包管理器界面提供了如下语句 所以node.js容器是可以执行语句的 下面通过docker 的 -w 、-v 参数设置容器工作目录和目录映射(实现本…

MySQL技巧之跨服务器数据查询:进阶篇-从A服务器的MySQ数据库复制到B服务器的SQL Server数据库的表中

MySQL技巧之跨服务器数据查询:进阶篇-从A服务器的MySQ数据库复制到B服务器的SQL Server数据库的表中 基础篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MyS…

Flutter 指纹识别

在这篇博客中,我们将介绍如何使用 Flutter 的 local_auth 插件在 Android 和 iOS 设备上实现指纹识别功能。通过这一步一步的实现,我们将学习如何检查设备是否支持生物识别、如何触发指纹验证,并处理可能出现的错误。 效果图(因为…

CentOS 9 配置静态IP

文章目录 1_问题原因2_nmcli 配置静态IP3_使用配置文件固定IP4_重启后存在的问题5_nmcli 补充 1_问题原因 CentOS 7 于 2014年6月发布,基于 RHEL 7,并在 2024年6月30日 结束维护。 CentOS 9 作为目前的最新版本,今天闲来闲来无事下载下来后…

面阵相机的使用和注意事项

引言 面阵相机(Area Scan Camera)是一种广泛应用于工业视觉、医学成像、安防监控以及科研领域的图像采集设备。与线扫相机不同,面阵相机的传感器包含多行像素(例如1280x1024、1920x1080等),能够在一个曝光…

损失函数分类

1. NLLLoss(负对数似然损失) 定义: 直接对预测的概率 p(yi) 的负对数求平均。通常配合 Softmax 使用,输入为对数概率。 优点: 对离散分类问题效果良好。更灵活,用户可以自行计算 Softmax。 缺点&#x…

python冒号是什么意思

例如: user: User User.objects.filter(iddata.get(uid)).first() 变量名后面的冒号是:类型注解,3.6以后加入的,冒号右边是类型,仅仅是注释,有些鸡肋。 变量注释的语法:注释变量类型,明确指出…

打字指法和键盘按键功能简介

打字指法和键盘按键功能简介 一、打字指法简介(附视频演示) 基本要领和练习步骤: 手指位置:正常情况下,大拇指放在空格键上,其余四个手指分别放在 ASDF 和 JKL; 键上。 打字姿势:打字时手指…

H3C ACL实验

实验拓扑 实验需求 按照图示配置 IP 地址全网路由互通在 SERVER1 上配置开启 TELNET 和 FTP 服务配置 ACL 实现如下效果 192.168.1.0/24网段不允许访问 192.168.2.0/24 网段,要求使用基本 ACL 实现 PC1 可以访问 SERVER1 的 TELNET 服务,但不能访问 FTP…

【热门主题】000077 物联网智能项目:开启智能未来的钥匙

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…

AIGC时代 | 如何从零开始学网页设计及3D编程

文章目录 一、网页设计入门1. 基础知识2. 学习平台与资源3. 示例代码:简单的HTMLCSSJavaScript网页 二、3D编程入门1. 基础知识2. 学习平台与资源3. 示例代码:简单的Unity 3D游戏 《编程真好玩:从零开始学网页设计及3D编程》内容简介作者简介…

Java并发07之ThreadLocal

文章目录 1 ThreadLocal原理2 内部结构3 内存泄露问题4 entry的key为什么被设计为弱引用 1 ThreadLocal原理 ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private st…

python股票数据分析(Pandas)练习

需求: 使用pandas读取一个CSV文件,文件内容包括股票名称、价格和交易量。完成以下任务: 找出价格最高的股票; 计算总交易量; 绘制价格折线图。 代码实现: import pandas as pd import matplotlib.pyplot …

鸿蒙NEXT元服务:论如何免费快速上架作品

【引言】天下武功,唯快不破。 本文讨论如何免费且以最快速度上架自己的作品。 作者以自己从零开始到提交发布审核一共俩小时的操作流程分享给大家作参考。 【1】立项选择 结论:元服务,单机,工具类(非游戏&#xff…

el-select 修改样式

这样漂亮的页面,搭配的却是一个白色风格的下拉框 ,这也过于刺眼。。。 调整后样式为: 灯红酒绿总有人看着眼杂,但将风格统一终究是上上选择。下面来处理这个问题。 分为两部分。 第一部分:是修改触发框的样式 第二部…

M|两小无猜

title: 两小无猜 Jeux d’enfants time: 2024-12-01 周日 rating: 7 豆瓣: 7.9 上映时间: “2003” 类型: M爱情 导演: 杨塞谬尔 Yann Samuell 主演: 吉约姆卡内 Guillaume Canet玛丽昂歌迪亚 Marion Cotillard 国家/地区: 法国比利时 片长/分钟: 93分钟 M&#xff…