2016-11-03 6 views
0

Я использую команду базы данных H2 MERGE, но не понимаю ее часть documentation. Неисправляемая часть -Слияние в базе данных H2

Если таблица содержит автоинкрементный ключ или столбец идентификации, а строка обновлена, сгенерированный ключ устанавливается в 0; в противном случае он устанавливается на новый ключ

я выполнил следующие SQL-операторы, чтобы попытаться понять, что

CREATE TABLE h2_test (id INTEGER PRIMARY KEY AUTO_INCREMENT, int INTEGER) 
INSERT INTO h2_test (int) VALUES (42) 
INSERT INTO h2_test (int) VALUES (43) 
INSERT INTO h2_test (int) VALUES (44) 
MERGE INTO h2_test (int) KEY(int) VALUES (45) 
MERGE INTO h2_test (id, int) VALUES (5, 46) 
MERGE INTO h2_test (id, int) VALUES (2, 47) 
INSERT INTO h2_test (int) VALUES (48) 

таблица выглядит следующим образом после вышеуказанных заявлений

+---------+ 
| ID INT | 
+---------+ 
| 1 42 | 
| 2 47 | 
| 3 44 | 
| 4 45 | 
| 5 46 | 
| 6 48 | 
+---------+ 

Так нет независимо от того, включаю ли я первичный ключ в MERGE, он увеличивается, если результат приводит к добавлению записи. & оставляет уже существующее значение untouc hed в случае, если результат приводит к обновлению записи.

Было бы замечательно, если бы кто-нибудь может пролить свет на то, что цитируемый часть документации пытается выразить

ответ

0

Работа, как и ожидалось. У вас есть 7 операторов INSERT/MERGE, которые приводят к 6 новым записям и одному обновлению. Ваш последний оператор MERGE обновляет запись, созданную вторым оператором INSERT (значение 43). Обычно вы используете KEY-часть MERGE, чтобы проверить, существует ли строка, заданная непервичным ключом. В вашем запросе 45 пока не существует. Добавьте еще один столбец, затем запросите существующее значение столбца «int», чтобы увидеть значимые обновления существующих строк.

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