Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HSQLDBs';在重复密钥更新时'-功能与MYSQL中的行为不一样?_Java_Mysql_Hsqldb - Fatal编程技术网

Java HSQLDBs';在重复密钥更新时'-功能与MYSQL中的行为不一样?

Java 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

我在重复密钥更新上使用了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
  • 第一次运行后,计数器为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中添加)您的查询似乎是作为两个独立的语句执行的。首先插入一条记录(无条件?或新记录替换旧记录?),第二次递增插入的
计数器
值。