在H2数据库中合并

时间:2016-11-03 01:04:39

标签: h2 sql-merge

我正在使用H2数据库的MERGE命令,但不了解其documentation的一部分。令人不安的是 -

  

如果表包含自动递增的密钥或标识列,并且行已更新,则生成的密钥设置为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中包含主键,如果语句导致添加了记录,它就会增加。如果语句导致更新记录,则保留已存在的值不变。

如果有人可以了解文档引用部分试图表达的内容,那就太棒了

1 个答案:

答案 0 :(得分:0)

按预期工作。您有7个INSERT / MERGE语句,这将导致6个新记录和一个更新。您的上一个MERGE语句更新由第二个INSERT语句创建的记录(值43)。您通常使用MERGE的KEY部分来检查是否存在由非主KEY指定的行。在您的查询中,45还不存在。添加另一列,然后查询现有的“int”列值,以查看对现有行的有意义更新。