首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL中保留记录更新的历史记录?

如何在MySQL中保留记录更新的历史记录?
EN

Stack Overflow用户
提问于 2010-03-29 17:16:09
回答 6查看 37.6K关注 0票数 25

我必须在PHP中创建一个代码,允许我在MySQL数据库中保存记录更新的历史记录,这样我就可以按日期找到旧的修订版本。

下面是我真正想要实现的示例:http://en.wikipedia.org/w/index.php?title=Tunisia&action=history

这些数据主要是我们记录的关于公司的数字,用于生成报告和提取指数。

我计划使用codeigniter,因为它的简单性,我正在寻找一个框架或开源项目的想法,使用相同的方法来保存数据库中的修改历史。

EN

回答 6

Stack Overflow用户

发布于 2010-03-29 17:33:46

最简单的解决方案(取决于您的特定需求)可能是向表中添加一个on update/insert/delete触发器,以便在插入/更新/删除数据时执行额外的日志记录。这样一来,即使是对数据库的手动干预也会被覆盖。

有关更多信息,请查看http://dev.mysql.com/doc/refman/5.1/en/triggers.html

票数 19
EN

Stack Overflow用户

发布于 2010-03-29 17:25:21

保存版本历史的一种简单方法是创建一个基本上相同的表(例如,带有_version后缀)。这两个表都有一个版本字段,对于主表,您可以在每次更新时递增该字段。version表在(id, version)上有一个复合主键。

每当对实际表进行更新时,都会在version表中插入包含重复数据的新行。无论何时你想找到版本历史,你所需要做的就是像SELECT * FROM content_version WHERE id = CONTENT_ID ORDER BY version这样的东西。

如果你使用Doctrine ORM之类的东西,它有一个行为,可以通过事件侦听器自动为你做这件事。你可以在这里查看:http://www.doctrine-project.org/documentation/manual/1_2/en/behaviors#core-behaviors:versionable

票数 14
EN

Stack Overflow用户

发布于 2013-03-26 04:54:05

有一个开源(麻省理工学院许可证)框架来构建CRM和ERP类型的数据库驱动的web应用程序。您可以从http://epe.si/下载EPESI,也可以从SourceFroge下载:http://sourceforge.net/projects/epesi/

EPESI的CRUD引擎- Record Browser -具有非常有效的记录历史记录以及其他功能,如高级权限系统(细化到字段级别)等。

单个记录集将数据存储在多达10个表中,并且它与数据库无关(使用PHPAdoDB)。一个名为recordset_data的表存储“原始”数据,更改历史记录存储在另外两个表中:recordset_edit_historyrecordset_edit_history_data.

Record的edit_history的结构如下:

时间戳ID(此表的主键,index)

  • Edited on (时间戳: 2008-05-14 15:18:15)

  • Edited by:(
  • ID )

Record的edit_history_data的结构如下:

编辑字段值=

  • edit_id = ID
    • edit_id=已更改字段的值=已更改字段的值。

它是一个非常快速和高效的引擎,它不是在记录上存储更改,而是在单个字段级别上存储更改。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2536819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档