HSQLDB: таблица REPLACE INTO выбрасывает org.hsqldb.HsqlException: нарушение ограничения целостности: - PullRequest
1 голос
/ 27 марта 2020

Я использую HSQLDB в своем приложении javafx, я уже установил

sql.syntax_mys=true

REPLACE INTO работает нормально, когда дублирующееся поле - ПЕРВИЧНЫЙ КЛЮЧ или одно УНИКАЛЬНОЕ ИНДЕКСИРОВАННОЕ ПОЛЕ.

проблема возникает, когда дублированные значения являются частью УНИКАЛЬНОГО ИНДЕКСА в нескольких столбцах вместо замены строк, это вызывает нарушение ограничения целостности:

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 Ответ

1 голос
/ 29 марта 2020

Создайте уникальное ограничение для нескольких столбцов вместо создания уникального индекса. Вы можете сделать это как в MySQL, так и в HSQLDB.

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