【问题标题】:On duplicate key update feature in H2关于 H2 中的重复密钥更新功能
【发布时间】:2015-06-30 19:10:25
【问题描述】:

我使用 H2(嵌入式)开发了 java 桌面应用程序。我只是对数据库有基本的了解,所以我只是安装了 H2 并创建了一个模式名称 RecordAutomation,然后将表添加到该模式中。现在我正在尝试对无法正常工作的特定表使用 ON DUPLICATE KEY UPDATE 功能,给出 sql 语法错误,我检查了我的查询,发现它是正确的,如下所示

INSERT INTO RECORDAUTOMATION.MREPORT 
(PRODUCTID ,DESCRIPTION ,QUANTITY ,SUBTOTAL ,PROFIT ) 
VALUES (22,olper,5,100,260) 
ON DUPLICATE KEY UPDATE SET QUANTITY = QUANTITY+5;

我搜索并尝试在一些讨论的地方解决此问题,例如此功能不适用于非默认表。我不知道默认和非默认。请帮帮我

【问题讨论】:

标签: sql h2


【解决方案1】:

您需要使用 MySQL 模式。为此,请将 ;mode=MySQL 附加到数据库 URL。 (此功能尚未正确记录)。

表需要有一个主键或至少一个唯一索引。完整示例:

drop table MREPORT;

set mode MySQL;

create table MREPORT(PRODUCTID int primary key, 
DESCRIPTION varchar, QUANTITY int,  SUBTOTAL int, PROFIT int);

INSERT INTO MREPORT 
(PRODUCTID ,DESCRIPTION ,QUANTITY ,SUBTOTAL ,PROFIT ) 
VALUES (22,'olper',5,100,260) 
ON DUPLICATE KEY UPDATE QUANTITY = QUANTITY+5;

【讨论】:

  • 不支持功能:“无法应用 ON DUPLICATE KEY UPDATE,未找到索引!”;我应用了 MySQL 模式,但它仍然无法正常工作
  • 是的,这是一个不同的问题。 “未找到索引”意味着“未找到索引”。我用一个例子更新了答案。
  • 感谢您的帮助。第一次当表为空时,您的查询工作正常,但第二次当数据重复时,我收到此错误:未找到列“PUBLIC.MREPORT.PRODUCTID”; SQL 语句: INSERT INTO recordautomation.MREPORT (PRODUCTID ,DESCRIPTION ,QUANTITY ,SUBTOTAL ,PROFIT ) VALUES (22,'olper',5,100,260) ON DUPLICATE KEY UPDATE QUANTITY = QUANTITY+5
  • 是的,这已在版本 1.4.187 中修复。在此之前,MySQL 兼容性功能“在重复键更新时插入 ...”不适用于非默认模式。
  • 如果您在低于 1.3.187 的 H2 版本中遇到此错误,您可以通过确保将当前架构设置为您正在查询的表使用的架构来解决该错误。 @rockledgeDev 可以通过首先调用 SET SCHEMA recordautomation; 来解决他的问题
猜你喜欢
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 2018-06-24
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
相关资源
最近更新 更多