Java HSQLDBs';在重复密钥更新时'-功能与MYSQL中的行为不一样?
我在重复密钥更新上使用了MYSQLsJava HSQLDBs';在重复密钥更新时'-功能与MYSQL中的行为不一样?,java,mysql,hsqldb,Java,Mysql,Hsqldb,我在重复密钥更新上使用了MYSQLs,在MYSQL数据库上运行时,它的工作原理与我预期的一样。但当我尝试编写针对内存中HSQLDB的测试时,我会体验到不同的行为 鉴于下表: CREATE TABLE foo (id INT PRIMARY KEY NOT NULL, counter INT); 使用以下insert语句: INSERT INTO foo(id, counter) VALUES (1, 1) ON DUPLICATE KEY UPDATE counter=counter+1
,在MYSQL数据库上运行时,它的工作原理与我预期的一样。但当我尝试编写针对内存中HSQLDB的测试时,我会体验到不同的行为
鉴于下表:
CREATE TABLE foo (id INT PRIMARY KEY NOT NULL, counter INT);
使用以下insert语句:
INSERT INTO foo(id, counter) VALUES (1, 1) ON DUPLICATE KEY UPDATE counter=counter+1
- 第一次运行后,计数器为1
- 第二次运行后,计数器为2
- 第三次运行后,计数器仍然为2。在这里,我希望计数器是3。(如果我对MYSQL运行相同的查询,则为3)
这是一个bug,还是我误解了重复密钥更新的应该如何工作
有关正在运行的示例,请参见以下github存储库:重复更新时的初始HSQLDB实现在遇到col_name
的所有情况下都使用值列表作为更新源。版本2.5.1对其进行了增强,将现有表行值用作col\u name
的源,并将值列表用作值(col\u name
)的源。这与MySQL的使用情况相对应。如果在重复键更新计数器=计数器+1上插入foo(id,counter)值(1,11)
-计数器保持2
或变成12
?-重复密钥更新没有支持说明。在重复密钥更新计数器=计数器+1的foo(id,计数器)值(1,11)中插入计数器,然后计数器变为12。介绍有关重复密钥更新的-支持。(在更高版本的HSQLDB中添加)您的查询似乎是作为两个独立的语句执行的。首先插入一条记录(无条件?或新记录替换旧记录?),第二次递增插入的计数器值。