2011-05-26 7 views
1

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

Процесс А выполняет CRUD (Create, Read, Update, Delete) на T.

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

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

ответ

2

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

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

ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP 

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

+0

Я предполагаю, что следующий шаг для меня, чтобы выяснить, может ли это быть автоматизированы. Благодарю. – JVerstry

+1

В 'src/test/org/h2/samples' есть несколько примеров триггеров. – trashgod

0

В базе данных хранятся только то, что вы настроили.

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

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

FYI: http://www.h2database.com/html/features.html#computed_columns

 Смежные вопросы

  • Нет связанных вопросов^_^