2016-03-01 44 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服務器中,唯一約束是通過在引擎蓋下創建唯一索引來實現的,所以它們之間確實沒有太大的區別。在任何情況下,唯一性都是在索引上執行,而不是直接在表格列上執行。