【发布时间】:2020-01-30 10:19:35
【问题描述】:
我正在使用 MYSQLs ON DUPLICATE KEY UPDATE-feature,它在 MYSQL 数据库上运行时可以正常工作。但是,当我尝试编写针对内存中 HSQLDB 运行的测试时,我会遇到不同的行为。
给定下表:
CREATE TABLE foo (id INT PRIMARY KEY NOT NULL, counter INT);
使用以下插入语句:
INSERT INTO foo(id, counter) VALUES (1, 1) ON DUPLICATE KEY UPDATE counter=counter+1
- 第一次运行后,计数器为 1。
- 第二次运行后,计数器为 2。
- 第三次运行后,计数器仍为 2。这里我希望计数器为 3。(如果我对 MYSQL 运行相同的查询,则为 3)。
这是一个错误,还是我误解了 ON DUPLICATE KEY UPDATE 的工作原理?
有关运行示例,请参阅以下 github-repository:https://github.com/mortenberg80/hsqldbtest
【问题讨论】:
-
如果
INSERT INTO foo(id, counter) VALUES (1, 11) ON DUPLICATE KEY UPDATE counter=counter+1- 计数器保持2或变为12怎么办? -
HSQLDB - Insert - 没有描述
ON DUPLICATE KEY UPDATE支持。 -
INSERT INTO foo(id, counter) VALUES (1, 11) ON DUPLICATE KEY UPDATE counter=counter+1,然后计数器变为 12。 -
hsqldb.org/doc/guide/… 描述了
ON DUPLICATE KEY UPDATE-support。 (在 HSQLDB 的更高版本中添加) -
您的查询似乎是作为 2 个单独的语句执行的。首先插入一条记录(无条件?还是新记录替换旧记录?),第二个增量插入
counter值。