HSQLDB:REPLACE INTO 表抛出 org.hsqldb.HsqlException:完整性约束违规:

Posted

技术标签:

【中文标题】HSQLDB:REPLACE INTO 表抛出 org.hsqldb.HsqlException:完整性约束违规:【英文标题】:HSQLDB: REPLACE INTO table throws org.hsqldb.HsqlException: integrity constraint violation: 【发布时间】:2020-03-27 17:12:41 【问题描述】:

我在我的 javafx 应用程序上使用 HSQLDB, 我已经设置了

sql.syntax_mys=true

当重复字段是 PRIMARY KEY 或单个 UNIQUE INDEXED FIELD 时,REPLACE INTO 可以正常工作。

当重复值是多列上 UNIQUE INDEX 的一部分而不是替换行时,问题就出现了,它会引发完整性约束违规:

CREATE UNIQUE INDEX table_unique_index ON table (COLUMN1, COLUMN2, COLUMN3);
REPLACE INTO table (COLUMN1, COLUMN2, COLUMN3, COL4, COL5) VALUES ('VAL1', 'VAL2', 'VAL3', 4, 5, 6);
REPLACE INTO table (COLUMN1, COLUMN2, COLUMN3, COL4, COL5) VALUES ('VAL1', 'VAL2', 'VAL3', 3, 6, 3); 

java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: unique constraint or index violation: FEE_STRUCTURE_0
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source)
    at org.snowbit.databases.HSQLDB.execute(HSQLDB.java:142)
    at org.snowbit.databases.HSQLDB.execute(HSQLDB.java:137)

我已经搜索了解决方案或有类似问题的人,但没有找到。请协助提前谢谢。

【问题讨论】:

【参考方案1】:

在多个列上创建唯一约束,而不是创建唯一索引。您可以在 mysql 和 HSQLDB 中执行此操作。

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (COLUMN1, COLUMN2, COLUMN3);

【讨论】:

以上是关于HSQLDB:REPLACE INTO 表抛出 org.hsqldb.HsqlException:完整性约束违规:的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB: INSERT INTO ... (SELECT NULL, * FROM) 导致“列名重复”

在 DB2 中创建表抛出 BOOLEAN data type is not supported 错误。知道如何解决这个问题吗?

使用 HSQLDB 选择 INTO

如何知道 Hsqldb "MERGE INTO" 是不是进行了插入或更新

RazorSQL 导致 HSQLDB 抛出 org.hsqldb.HsqlException:需要大于 '2.1.0.0' 的客户端驱动程序版本。 HSQLDB 服务器版本是 '2.3.4'

HSQLDB 在 Windows 上运行,但在 Linux 上抛出异常