HSQLDB 的"重复密钥更新"功能的行为与 MYSQL 不同?



我正在使用MYSQLON 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

在重复更新时,初始 HSQLDB 实现使用 VALUES 列表作为遇到col_name的所有情况下的更新源。在 2.5.1 版中,它已得到增强,可以使用现有的表行值作为col_name的源,并使用 VALUES 列表作为 VALUES(col_name的源(。这与MySQL的使用相对应。

最新更新