我正在使用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的使用相对应。