相关疑难解决方法(0)

如何创建一个也允许空值的唯一约束?

我希望对我将使用GUID填充的列具有唯一约束.但是,我的数据包含此列的空值.如何创建允许多个空值的约束?

这是一个示例场景.考虑这个架构:

CREATE TABLE People (
  Id INT CONSTRAINT PK_MyTable PRIMARY KEY IDENTITY,
  Name NVARCHAR(250) NOT NULL,
  LibraryCardId UNIQUEIDENTIFIER NULL,
  CONSTRAINT UQ_People_LibraryCardId UNIQUE (LibraryCardId)
)
Run Code Online (Sandbox Code Playgroud)

然后看看我正在尝试实现的代码:

-- This works fine:
INSERT INTO People (Name, LibraryCardId) 
 VALUES ('John Doe', 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA');

-- This also works fine, obviously:
INSERT INTO People (Name, LibraryCardId) 
VALUES ('Marie Doe', 'BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB');

-- This would *correctly* fail:
--INSERT INTO People (Name, LibraryCardId) 
--VALUES ('John Doe the Second', 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA');

-- This works fine this one first time: …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server

584
推荐指数
9
解决办法
23万
查看次数

如何在具有可能空值的字段上创建唯一索引(Oracle 11g)?

以下是包含3列的示例表(ID,UNIQUE_VALUE,UNIQUE_GROUP_ID)

我希望以下记录可以被允许:

(1, NULL, NULL)
(2, NULL, NULL)
Run Code Online (Sandbox Code Playgroud)

要么

(3, NULL, 7)
(4, 123, 7)
Run Code Online (Sandbox Code Playgroud)

或(注:此条件中不允许unique index,也没有unique constraint)

(5, NULL, 7)
(6, NULL, 7)
Run Code Online (Sandbox Code Playgroud)

这些是不允许的:

(7, 123, 7)
(8, 123, 7)
Run Code Online (Sandbox Code Playgroud)

我在最后2列创建了一个唯一索引,但只允许前两个示例.

是否可以让db只在两者都不为空时检查这两列的唯一性?

sql database oracle indexing

10
推荐指数
1
解决办法
2万
查看次数

Oracle:创建唯一索引但忽略NULL

我在SO上遇到了这个例子,它给出了一个通过忽略空值来创建唯一索引的解决方案.但是,我想扩展它,我无法达成解决方案.

我有一个表的3列的复合索引(表中还有其他10列).这些列不是PK的一部分.在这3列中,2将始终保留一些值,第3列可能为NULL.我有大量的测试数据,并且有许多插入,其中2列具有相同的值,第3列为NULL.这些所有插件都适用于PostgreSQL,但Oracle抱怨道.为了让我的测试用例工作,我认为我认为最简单的解决方案是尝试一个独特的Oracle索引,它可以在PostgreSQL中运行.

确切地说:我想要一种以下类型的结构,不确定如何结合 col1 + col2 + col3

create unique index tbl_idx on tbl (nvl2(col3, col1 + col2, col1 + col2 + col3))
Run Code Online (Sandbox Code Playgroud)

我正在使用liquibase.索引以下列方式创建 -

<changeSet dbms="postgresql,oracle" author="abc" id="222">
    <createIndex indexName="Index_7" schemaName="ss" tableName="Users" unique="true">
        <column name="idOrganization"/>
        <column name="strUsername"/>
        <column name="strNotDeleted"/>
    </createIndex>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

我使用liquibase来创建我的测试数据,这里有两个插入语句

<insert schemaName="ss" tableName="Users">
    <column name="strUsername" value="user1" />
    <column name="idUser" valueNumeric="20741" />
    <column name="idOrganization" valueNumeric="4" />
    <column name="strFirstName" value="user" />
    <column name="strLastName" value="one" />
    <column name="strEmail" value="email@foo.com" />
    <column name="strNotDeleted" />
</insert>
<insert schemaName="ss" tableName="Users">
    <column …
Run Code Online (Sandbox Code Playgroud)

oracle11g

1
推荐指数
1
解决办法
9589
查看次数

标签 统计

database ×1

indexing ×1

oracle ×1

oracle11g ×1

sql ×1

sql-server ×1

t-sql ×1