Краткий ответ:
MERGE INTO AUDIT_TRANSACTION_IDS (UUID, время) KEY (UUID, время)
VALUES (TRANSACTION_ID (), NOW ());
небольшой совет по производительности: убедитесь, что uuid проиндексирован
Длинный ответ:
MERGE
- это, по сути, UPDATE
, что INSERT
с, если не найдено записей для обновления.
Википедия дает более сжатый, стандартизированный синтаксис
MERGE но вы должны предоставить собственное обновление и вставить.
(Будет ли это поддерживаться в H2 или нет, я не отвечаю)
Так как же обновить запись, используя MERGE
в H2? Вы определяете ключ для поиска, если он найден, вы обновляете строку (с указанными вами именами столбцов, и вы можете определить DEFAULT
здесь, чтобы вернуть столбцам значения по умолчанию), иначе вы вставляете строку.
Теперь, что такое Null
? Null
означает неизвестное, не найденное, неопределенное, все, что не то, что вы ищете.
Именно поэтому Null
работает как ключ, который нужно искать. Потому что это означает, что запись не найдена.
MERGE INTO table1 (id, col1, col2)
КЛЮЧ (id) ЗНАЧЕНИЯ (ноль, 1, 2)
Null
имеет значение. это значение.
Теперь посмотрим ваш SQL.
MERGE INTO table1 (id, col1, col2)
КЛЮЧ (id) ЗНАЧЕНИЯ (ПО УМОЛЧАНИЮ, 1, 2)
Что это значит? Для меня это говорит
У меня есть это [ПО УМОЛЧАНИЮ, 1, 2], найди мне DEFAULT
в столбце id
,
затем обновите col1
до 1, col2
до 2, если найдено.
в противном случае введите значение по умолчанию id
, от 1 до col1
, от 2 до col2
.
Видите, что я там подчеркнул? Что это хотя бы значит? Что такое DEFAULT
? Как вы сравниваете DEFAULT
с id
?
DEFAULT
- это просто ключевое слово.
Вы можете делать такие вещи, как,
MERGE INTO table1 (id, col1,
timeStampCol) KEY (id) VALUES (Null, 1,
DEFAULT)
но не ставьте DEFAULT в ключевой столбец.