我有一个db模式,其中使用外键引用存储用户数据,这些外键是管理员定义的。此外,有一些数据存储时没有主键,但我有其他限制,以避免冗余和其他问题。
由于用户“更新”其信息时应用程序的要求,我必须从“更新”表中删除所有用户记录,然后重新插入所有用户的记录。 (我已经调查了所有其他选项)
现在由于我的搜索解决方案(solr),我需要跟踪用户数据的更改(更新/删除)。我计划将最后提交的数据与实时数据进行比较。我担心每20分钟左右运行一次存储过程是多么可持续,是否有更好的方法可以使用SQL跟踪数据?
答案 0 :(得分:2)
您可以创建一个更改表,其中包含与原始表相同的列以及另一个名为“UpdatedOn”的列。然后设置一个触发器,在原始表更改时将原始值写入此更改表。
实施例: 原表:
Name | Address | City
Jane Doe | 1 Main St. | New York
更改为原始表:
Name | Address | City
Jane Doe | 2 Smith St. | Dubuque
...触发更改表的插入:
Name | Address | City | UpdatedOn
Jane Doe | 1 Main St. | New York | 2012-01-01
有关于在mysql中使用触发器的信息:http://dev.mysql.com/doc/refman/5.0/en/triggers.html