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

问题描述 投票:0回答:1

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

sql.syntax_mys=true

当重复字段是PRIMARY KEY或单个UNIQUE INDEXED字段时,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)

我已经搜索了解决方案或有类似问题的人,但没有找到..请事先帮助您。

java indexing constraints unique hsqldb
1个回答
0
投票

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

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (COLUMN1, COLUMN2, COLUMN3);
© www.soinside.com 2019 - 2024. All rights reserved.