2016-11-03 5 views
0

Ich benutze H2-Datenbank MERGE Befehl, aber verstehe nicht einen Teil seiner documentation. Der störende Teil ist -Merge in H2-Datenbank

Wenn die Tabelle eine automatisch inkrementierte Schlüssel- oder Identitätsspalte enthält und die Zeile aktualisiert wurde, wird der generierte Schlüssel auf 0 gesetzt; andernfalls wird er auf den neuen Schlüssel gesetzt

ich die folgenden SQL-Anweisungen ausgeführt, um zu versuchen es

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) 

Die Tabelle sieht wie folgt aus, nachdem die obigen Aussagen

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

So zu verstehen nicht Egal, ob ich den Primärschlüssel in die MERGE einfüge, wird er erhöht, wenn die Anweisung dazu führt, dass ein Datensatz hinzugefügt wird & lässt den bereits vorhandenen Wert unouc Wenn die Anweisung dazu führt, dass ein Datensatz aktualisiert wird.

Es wäre toll, wenn jemand Licht auf das, was Teil der Dokumentation der zitierte vergießen kann versucht

Antwort

0

zum Ausdruck bringen, wie erwartet arbeiten. Sie haben 7 INSERT/MERGE-Anweisungen, die zu 6 neuen Datensätzen und einem Update führen. Ihre letzte MERGE-Anweisung aktualisiert den Datensatz, der von der zweiten INSERT-Anweisung erstellt wurde (Wert 43). In der Regel verwenden Sie den KEY-Teil von MERGE, um zu überprüfen, ob eine Zeile existiert, die von einem nicht primären KEY angegeben wurde. In Ihrer Anfrage existiert 45 noch nicht. Fügen Sie eine weitere Spalte hinzu und suchen Sie nach einem vorhandenen "int" -Spaltenwert, um sinnvolle Aktualisierungen für vorhandene Zeilen anzuzeigen.