HSQLDB 和唯一约束

Posted

技术标签:

【中文标题】HSQLDB 和唯一约束【英文标题】:HSQLDB and unique constraint 【发布时间】:2017-12-21 07:27:55 【问题描述】:

经过多次研究,我没有找到如何处理 HSQLDB 的 具有空列的唯一约束

此问题与以下内容直接相关: Create unique constraint with null columns。

相关答案(解决方法)适用于 PostgreSQL (create unique index ... where conditions),但不适用于 HSQLDB(从我的角度来看)。

理想情况下,我希望 PostgreSQL HSQLDB 使用相同的“create_ddl”脚本来管理具有空列的唯一约束行为

我们将不胜感激任何帮助、想法或解决方法。

【问题讨论】:

【参考方案1】:

HSQLDB 有一个设置,允许在 UNIQUE 约束的一列中只允许一行为空。您可以使用此语句更改默认设置一次。

SET DATABASE SQL UNIQUE NULLS FALSE

您只需在三列上创建一个 UNIQUE 约束。 null 被视为一个不同的值,它不允许两行在三列中具有相同的值,即使其中之一为 null。

【讨论】:

非常感谢,弗雷特!这完全符合我的需要。顺便说一句,我想创建一个条件不是空值的唯一约束(例如,'where =true')。如何使用 HSQLDB 取得成功?我要为此创建一个新问题吗? 我不明白你的意思。如果在两行中,约束列中有 (3, true) 和 (3, true),它们不是不同的,不能同时插入。写出你想要与众不同的价值观的例子。 感谢您的回答。我想多次插入行(3,false),但我只想插入一次,行(3,true)。在 PostgreSql 中,我以这种方式定义了这种行为: CREATE UNIQUE INDEX pmd_unique_def_wlt_idx ON TABLE_A (COLUMN_ID,DEFAULT_USE) WHERE DEFAULT_USE=true; 您可以定义生成的列并在此列上创建约束COL_ID INT GENERATED ALWAYS AS (CASE WHEN DEFAULT_USE THEN COLUMN_ID ELSE NULL),但它依赖于默认的 UNIQUE NULLS TRUE 行为。

以上是关于HSQLDB 和唯一约束的主要内容,如果未能解决你的问题,请参考以下文章

唯一约束 (indexExists) 的 Liquibase 前提条件不适用于 HSQLDB 数据库?

HSQLDB:奇怪的“唯一约束或索引违规”,从 CSV 读取数据

HSQLDB:奇怪的“唯一约束或索引违规”,从CSV读取数据

HSQLDB 索引和多列约束

尝试持久化和具有主键唯一约束的实体时出错

如何使用 Spring JDBCTemplate 从唯一的约束冲突中恢复?