Выяснение, когда строка была изменена в таблице базы данных H2 - PullRequest
1 голос
/ 26 мая 2011

Давайте представим, что у меня есть два процесса A и B, выполняющие транзакции в таблице базы данных H2 T.

Процесс A выполняет CRUD (создание, чтение, обновление, удаление) на T.

Процесс B хочет знать, когда строка L в T была в последний раз изменена (то есть, например, B предоставляет значение System.currentTimeMillis()).

Можно создать столбец в T, регистрирующий момент последней модификации для каждой строки, но мне было интересно, хранит ли H2 эту информацию где-нибудь и есть ли к ней доступ.

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Насколько мне известно, такой функции нет в H2 (и, вероятно, нет ни в одной RDBMS). Причина проста - дополнительные 4 или 8 байтов на каждую запись могут оказать огромное влияние на общий размер базы данных, особенно с небольшими записями. Также будет небольшое влияние на производительность.

Но реализовать эту функцию относительно просто, используя дополнительный столбец и триггер обновления. Также некоторые базы данных могут еще больше упростить это, например, MySQL:

ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP

Также, пожалуйста, различайте часы сервера базы данных, часы процесса A и часы процесса B. В реальном мире они, скорее всего, не будут такими же.

0 голосов
/ 26 февраля 2014

База данных хранит только то, что вы настроили.

Таким образом, вы должны установить таблицу для хранения времени модификации, и один действительно простой способ сделать это - создать «Вычисляемый столбец» со значением now(). Вычисляемый столбец оценивается каждый раз, когдазапись изменена.

CREATE TABLE TEST(ID INT, NAME VARCHAR, LAST_MOD TIMESTAMP AS NOW());

К вашему сведению: http://www.h2database.com/html/features.html#computed_columns

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...