【问题标题】:HSQLDBs 'ON DUPLICATE KEY UPDATE'-feature does not behave as in MYSQL?HSQLDBs 'ON DUPLICATE KEY UPDATE'-功能不像 MYSQL 那样表现?
【发布时间】: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 值。

标签: java mysql hsqldb


【解决方案1】:

在遇到col_name 的所有情况下,ON DUPLICATE UPDATE 的初始 HSQLDB 实现都使用 VALUES 列表作为更新源。版本 2.5.1 已增强,可以使用现有表行值作为 col_name 的源,并使用 VALUES 列表作为 VALUES(col_name) 的源。这与 MySQL 的用法相对应。

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2011-08-09
    • 2014-09-29
    相关资源
    最近更新 更多