我正在使用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
中包含主键,如果语句导致添加了记录,它就会增加。如果语句导致更新记录,则保留已存在的值不变。
如果有人可以了解文档引用部分试图表达的内容,那就太棒了
答案 0 :(得分:0)
按预期工作。您有7个INSERT / MERGE语句,这将导致6个新记录和一个更新。您的上一个MERGE语句更新由第二个INSERT语句创建的记录(值43)。您通常使用MERGE的KEY部分来检查是否存在由非主KEY指定的行。在您的查询中,45还不存在。添加另一列,然后查询现有的“int”列值,以查看对现有行的有意义更新。