首先,我建议您更改表结构,如下所示:
id field1 field2 field3 field4 timestamp
变成这样的东西:
Table 1
-------
id fieldKey value timestamp
1 1 42 12:03am
2 3 'Cow' 1:45am
3 2 'Moo' 2:33am
4 4 99 3:59am
Table 2
-------
fieldKey fieldLabel
1 Field One
2 Field Two
3 Event One
4 Event Two
其次,您可以通过复制旧值或计算字段值的哈希值(对于长字段)并将它们与时间戳一起存储在另一个字段(oldField1、oldField2 等)中来实现您想要的,然后轮询表. 我相信所有数据库都有一个哈希函数,比如 SHA1('xyz') 或 MD5('abc'),尽管每个数据库的名称可能略有不同。
然后,当您轮询表以进行更改时,您会看到已更改的行,您可以逐个字段进行比较以找出哪个字段已更改。因此,您可以将 field1 与 oldField1、field2 与 oldField2、field3 与 oldField3 等进行比较。对于 blob,您可以将 SHA1(field4) 与 oldField4) 进行比较。
创建存储过程触发器以在更新时间戳时复制字段。
另一种解决方案是创建一个仅存储更改的数据更改日志表。它将通过触发器存储过程插入,它看起来像这样
id tableName rowKey fieldName oldValue newValue timestamp
1 WINDOWS_EVENTS 42 event1 stable crash 4:44am