2016-03-01 43 views
-1

我最近阅读了有关确保SQL中的列中的唯一值并允许多个NULLS的方法。具有多个NULL值的SQL中的唯一约束

CREATE UNIQUE INDEX indexName ON tableName(columns) INCLUDE includeColumns 
WHERE columnName IS NOT NULL 

可能有人解释这实际上是如何工作的:

这是使用过滤索引做了什么?

是否在列上创建了UNIQUE约束?

+2

这取决于你正在使用的**具体RDBMS ** - 用'mysql','postgresql','oracle','sql-server','db2'或其他任何你可能会遇到的问题来标记你的问题使用! –

+1

我正在使用SQL Server ...标记为 – Tejas

+1

唯一引用的索引不是表,所以它的工作原理是因为具有NULL值的行不在索引中。 –

回答

0

要回答你的第一个问题:当索引被过滤时,任何不修复where子句中的条件的东西都被简单地排除在索引之外。
如果索引是唯一的,则只有符合where子句中的条件的数据才会执行唯一性。

要回答你的第二个问题:在Sql服务器中,唯一约束是通过在引擎盖下创建唯一索引来实现的,所以它们之间确实没有太大的区别。在任何情况下,唯一性都是在索引上执行,而不是直接在表格列上执行。