SQLite логические часы для данных строк, таких как версия строки в SQL Server - PullRequest
0 голосов
/ 25 апреля 2020

Есть ли в SQLite что-то вроде SQL Сервер Столбец версии строки , который будет увеличиваться при каждом изменении строки? По сути, я хочу иметь логические часы для каждой из моих таблиц, которые обновляются при каждом обновлении таблицы. С этими логическими часами мое приложение может хранить версию, которую оно видело в последний раз, и может только повторно извлечь, если данные изменились.

Я мог бы реализовать это с чем-то вроде:

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

Но это похоже на то, что должно уже существовать изначально.

1 Ответ

0 голосов
/ 25 апреля 2020

Вы можете использовать PRAGMA data_version, чтобы увидеть, изменило ли это какое-либо другое соединение с базой данных, и поэтому вашей программе необходимо обновить данные sh.

Целочисленные значения возвращаемый двумя вызовами «PRAGMA data_version» из одного и того же соединения будет отличаться, если изменения были внесены в базу данных любым другим соединением в промежуточный период.

Он не скажет вам, какие именно таблицы c были изменены.

...