0

SQLite 是否有类似 SQL Server 的rowversion 列,每次行更改时都会增加?本质上,我希望每个表都有一个逻辑时钟,每当表更新时都会更新。有了这个逻辑时钟,我的应用程序可以保存它最近看到的版本,并且只有在数据发生变化时才能重新获取。

我可以用类似的东西来实现它:

CREATE TRIGGER FOO_VERSION_INSERT_TRIGGER 
  AFTER INSERT ON FOO FOR EACH ROW
  BEGIN
    UPDATE CLOCKS
    SET VERSION = (
      SELECT IFNULL(MAX(VERSION), 0) + 1 FROM CLOCKS
    )
    WHERE TABLE_NAME = "FOO"
  END

CREATE TRIGGER FOO_VERSION_UPDATE_TRIGGER 
  AFTER UPDATE ON FOO FOR EACH ROW
  BEGIN
    UPDATE CLOCKS
    SET VERSION = (
      SELECT IFNULL(MAX(VERSION), 0) + 1 FROM CLOCKS
    )
    WHERE TABLE_NAME = "FOO"
  END

CREATE TRIGGER FOO_VERSION_DELETE_TRIGGER 
  AFTER INSERT ON FOO FOR EACH ROW
  BEGIN
    UPDATE CLOCKS
    SET VERSION = (
      SELECT IFNULL(MAX(VERSION), 0) + 1 FROM CLOCKS
    )
    WHERE TABLE_NAME = "FOO"
  END

但这似乎本来就应该存在。

4

1 回答 1

0

您可以使用PRAGMA data_version查看是否有任何其他与数据库的连接修改了它,因此您的程序需要刷新数据。

如果在此期间通过任何其他连接将更改提交到数据库,则来自同一连接的两次“PRAGMA data_version”调用返回的整数值将不同。

但是,它不会告诉您更改了哪些特定表。

于 2020-04-25T05:53:22.667 回答