有人问我是否可以跟踪MySQL数据库中记录的更改。因此,更改字段后,可以使用旧的还是新的字段以及日期。有没有功能或通用技术可以做到这一点?
如果是这样,我正在考虑做这样的事情。创建一个名为的表changes
。它包含与 主 表相同的字段,但以新旧为前缀,但仅适用于那些实际更改的字段和a
TIMESTAMP
。它将以索引ID
。这样,SELECT
可以运行报告以显示每个记录的历史记录。这是个好方法吗?谢谢!
真微妙
如果业务要求是“我想审核数据的更改-
谁做了什么以及何时做?”,则通常可以使用审核表(按照Keethanjan发布的触发器示例)。我不是触发器的忠实拥护者,但是它具有实施起来相对轻松的巨大好处-
您现有的代码不需要了解触发器和审计内容。
如果业务需求是“告诉我过去某个给定日期的数据状态是什么”,则意味着随时间变化的方面已进入您的解决方案。尽管您可以仅通过查看审计表来重建数据库的状态,但它既困难又容易出错,并且对于任何复杂的数据库逻辑而言,它都变得笨拙。例如,如果企业想知道“查找本月应该发送给在月初第一天有未付发票的客户的信件的地址”,则您可能不得不拖拉六个审计表。
相反,您可以将随时间变化的概念引入架构设计中(这是Keethanjan建议的第二种选择)。这绝对是在业务逻辑和持久性级别对您的应用程序进行的更改,因此这并非易事。
例如,如果您有一个这样的表:
CUSTOMER
---------
CUSTOMER_ID PK
CUSTOMER_NAME
CUSTOMER_ADDRESS
并且您想随时间推移进行跟踪,可以对其进行如下修改:
CUSTOMER
------------
CUSTOMER_ID PK
CUSTOMER_VALID_FROM PK
CUSTOMER_VALID_UNTIL PK
CUSTOMER_STATUS
CUSTOMER_USER
CUSTOMER_NAME
CUSTOMER_ADDRESS
每次您想要更改客户记录而不是更新记录时,都将当前记录上的VALID_UNTIL设置为NOW(),并插入一个新记录,其中包含VALID_FROM(现在)和空VALID_UNTIL。您将“
CUSTOMER_USER”状态设置为当前用户的登录ID(如果需要保留该状态)。如果需要删除客户,则使用CUSTOMER_STATUS标志来表明这一点-
您永远都不能从该表中删除记录。
这样,您始终可以找到给定日期的客户表状态-
地址是什么?他们有改名字吗?通过联接到具有相似有效日期和有效日期的其他表,您可以历史重构整个图片。要查找当前状态,请搜索日期为VALID_UNTIL的记录。
它很笨拙(严格来说,您不需要valid_from,但是它使查询更容易一些)。它使您的设计和数据库访问变得复杂。但这使重建世界变得容易得多。
我希望通过使用一个新表来存储一个日志,其中记录了在每次更新/插入中进行更改的用户、日期以及任何更改的内容,从而实现对我的一个模型实体的历史记录跟踪/审核。 我使用EclipseLink作为我的JPA提供者,但我不想使用它的历史策略,因为提供者将来可能会改变。出于同样的原因,我不能使用Hibernate Envers。 我研究了SpringData提供的审计支持,但它似乎非常基本,它只允许您存储创建
读取播放历史信息 调用地址 http://api.bilibili.cn/history 返回 返回值字段 字段类型 字段说明 results int 返回的记录总数目 list object 返回数据 返回字段 “list” 子项 返回值字段 字段类型 字段说明 aid int 视频编号 typeid int 视频分类ID typename string 视频分类名称 title string
历史记录 控制台维护 Elasticsearch 成功执行的最后500个请求列表。点击窗口右上角的时钟图标即可查看历史记录。这个图标会打开历史记录面板,您可以在其中查看历史请求。您也可以在这里选择一个请求,它将被添加到编辑器中当前光标所在的位置。 图 9. 历史记录面板
3.3.1.1. 同步的文件历史记录 微力同步记录对文件的添加,修改、删除的操作记录,通过历史记录列表可查看时间时间及发生设备,如下: 事件时间,显示添加、修改、删除等操作发生的时间; 文件时间,显示该文件的最后修改时间; 操作类型,显示此次针对该文件所进行的操作的类型; 发生设备,显示进行此操作的设备名称; 目录,显示该文件所属同步目录; 清空历史记录,点击后可清除所有记录,此操作仅清除记录而已
本文向大家介绍你有没有遗忘mysql的历史记录,包括了你有没有遗忘mysql的历史记录的使用技巧和注意事项,需要的朋友参考一下 查看mysql的语句,比较常用的大概是show processlist 命令了,但是这个对于查询时间比较长的语句比较有意义,对于一下子就能执行的语句真心拼不过手速啊. 于是就只能从mysql的历史记录里面着手了.为了实现这个目的,我们需要修改/etc
在rebase指定i选项,您可以改写、替换、删除或合并提交。 主要使用的场合: 在push之前,重新输入正确的提交注解 清楚地汇合内容含义相同的提交。 添加最近提交时漏掉的档案