首页 >数据库 >mysql教程 >如何使用触发器和视图跟踪和查看 MySQL 中的数据库更改?

如何使用触发器和视图跟踪和查看 MySQL 中的数据库更改?

Patricia Arquette
Patricia Arquette原创
2024-12-07 04:16:11964浏览

How Can I Track and View Database Changes in MySQL Using Triggers and Views?

使用 MySQL 跟踪数据库更改历史

许多数据库系统需要能够跟踪一段时间内对记录所做的更改。 MySQL 提供了一种简单的技术来实现这一点。考虑一个名为“data”的数据表,您要监视它的更改。

首先,为“data”创建一个具有相同结构的历史表,除了三个附加列:

  • 操作: VARCHAR(8) 默认值'插入'
  • 修订版: INT(6) NOT NULL auto_increment
  • dt_datetime: DATETIME NOT NULL 默认 CURRENT_TIMESTAMP

这些列存储操作(插入/更新/删除)、序列号以及操作的日期和时间。

接下来,创建触发器来捕获这些操作并填充历史表:

  • 插入触发器后: INSERT INTO data_history (action, revision, dt_datetime, ...) SELECT 'insert', NULL, NOW(), ... FROM data WHERE ...
  • 更新触发器后: INSERT INTO data_history (action, revision, dt_datetime, ...) SELECT 'update', NULL, NOW(), ... FROM data WHERE ...
  • 删除之前触发器: INSERT INTO data_history (action, revision, dt_datetime, ...) SELECT 'delete', NULL, NOW(), ... FROM data WHERE ...

现在,所有数据更改都会记录在“data_history”表中。要显示更新中特定列的更改,您可以在主键和序列列上将历史表与其自身连接:

CREATE VIEW data_history_changes AS
SELECT t2.dt_datetime, t2.action, t1.row_id,
IF(t1.a_column = t2.a_column, t1.a_column, t1.a_column || " to " || t2.a_column) AS a_column
FROM data_history AS t1 INNER JOIN data_history AS t2
ON t1.row_id = t2.row_id
WHERE (t1.revision = 1 AND t2.revision = 1) OR t2.revision = t1.revision + 1
ORDER BY t1.row_id ASC, t2.revision ASC

这应该提供对历史表所做的所有更改的紧凑历史视图“数据”表。

以上是如何使用触发器和视图跟踪和查看 MySQL 中的数据库更改?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn