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

如何获知表中数据被删除

目录

      • 1. 使用触发器 (Triggers)
        • 示例
      • 2. 使用审计工具 (Audit Tools)
        • 示例
      • 3. 使用Binlog (Binary Log)
        • 示例
      • 4. 使用应用层记录日志
        • 示例
      • 总结

要查询 MySQL 数据库表中的数据何时被删除,可以采取以下几种方法:

1. 使用触发器 (Triggers)

可以在表上创建一个触发器来记录删除操作。这涉及创建一个日志表来存储删除操作的时间戳和相关数据。

示例

假设有一个名为 example_table 的表,以下是创建触发器和日志表的步骤:

  1. 创建日志表:
CREATE TABLE delete_log (id INT AUTO_INCREMENT PRIMARY KEY,deleted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,deleted_data JSON
);
  1. 创建触发器:
DELIMITER //CREATE TRIGGER before_delete_example_table
BEFORE DELETE ON example_table
FOR EACH ROW
BEGININSERT INTO delete_log (deleted_data)VALUES (JSON_OBJECT('id', OLD.id, 'column1', OLD.column1, 'column2', OLD.column2));
END //DELIMITER ;

通过这个触发器,每次从 example_table 中删除一行时,删除的数据和时间戳将被记录到 delete_log 表中。

2. 使用审计工具 (Audit Tools)

使用 MySQL 的审计插件或第三方工具(如 Percona Audit Plugin、MariaDB Audit Plugin)可以记录所有的数据库活动,包括删除操作。

示例
  • 安装并配置 Percona Audit Plugin:
    • 下载并安装 Percona Server。

    • 配置审计插件:在 my.cnf 文件中添加以下配置:

      [mysqld]
      plugin-load=audit_log.so
      audit_log_policy=ALL
      
    • 启动 MySQL 服务后,审计日志将记录在指定位置,可以查看删除操作的时间和细节。

3. 使用Binlog (Binary Log)

启用二进制日志(Binlog),并使用 MySQL 的 mysqlbinlog 工具解析日志,找出删除操作。

示例
  1. 启用二进制日志:

    my.cnf 中添加:

    [mysqld]
    log-bin=mysql-bin
    
  2. 解析二进制日志:

    mysqlbinlog mysql-bin.000001 | grep -i "delete from example_table"
    

4. 使用应用层记录日志

在应用层(如 Java 应用)中,使用逻辑删除并记录删除时间。

示例

在表中添加一个 is_deleteddeleted_at 字段:

ALTER TABLE example_table ADD COLUMN is_deleted BOOLEAN DEFAULT FALSE;
ALTER TABLE example_table ADD COLUMN deleted_at TIMESTAMP NULL;

在删除记录时,不直接删除,而是更新这两个字段:

UPDATE example_table SET is_deleted = TRUE, deleted_at = NOW() WHERE id = 1;

通过这种方式,可以在查询时过滤出逻辑删除的记录,并查看删除时间。

总结

  • 触发器:适用于需要记录详细删除数据的场景。
  • 审计工具:适用于需要记录所有数据库操作的场景。
  • Binlog:适用于在启用了二进制日志的数据库中临时查询删除操作。
  • 应用层逻辑删除:适用于需要灵活控制删除逻辑的应用场景。

根据具体需求选择合适的方法。触发器和应用层逻辑删除相对简单易实现,而审计工具和 Binlog 适用于需要全面数据库操作日志的场景。

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

相关文章:

  • 机器学习之sklearn基础教程
  • ES升级--04--SpringBoot整合Elasticsearch
  • eclipse如何debug
  • 无人售货机零售业务成功指南:从市场分析到创新策略
  • 开源代码分享(32)-基于改进多目标灰狼算法的冷热电联供型微电网运行优化
  • 7、架构-架构的安全性
  • LeetCode题练习与总结:路径总和Ⅱ--113
  • Java复数计算
  • MySQL-事务日志
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类坐标点QPoint)
  • 算法练习——字符串
  • Flutter 中的 SliverOverlapInjector 小部件:全面指南
  • 7个Python爬虫入门小案例
  • linux 利用 ~$() 构造数字
  • 七大获取免费https的方式
  • JVM(Java虚拟机)笔记
  • 秒杀基本功能开发(显示商品列表和商品详情)
  • centos 记录用户登陆ip和执行命令
  • JZ2440笔记:DM9000C网卡驱动
  • 【数据结构】二叉树:简约和复杂的交织之美
  • 信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!
  • 编程学习技巧——实战
  • GPU学习(1)
  • TQSDRPI开发板教程:UDP收发测试
  • opencv进阶 ——(九)图像处理之人脸修复祛马赛克算法CodeFormer
  • 虚拟机改IP地址
  • MySQL(二)-基础操作
  • vue3学习使用笔记
  • 微信小程序怎么进行页面传参
  • 隆道出席河南ClO社区十周年庆典,助推采购和供应链数字化发展