2009-02-19 47 views
49

我有一個主鍵的表,但我想要兩個其他列進行約束,以確保兩者的組合總是唯一的。UniqueKey和Index與IsUnique = Yes有什麼區別?

(啞例如:在BOOKS表,伊班列是主鍵,但標題和作者列的組合也應始終是唯一的)

在SQL Server Management Studio中這是可能的創建一個新的索引並將IsUnique設置爲是,或者我可以創建一個新的唯一密鑰。

是什麼這兩種方法之間的區別,哪一個最適合爲其目的?

+5

以防萬一:如果您需要允許多行爲NULL,但任何非NULL行必須爲UNIQUE:或者使用觸發器強制執行此操作,或使用UNIQUE INDEX執行VIEW - CREATE VIEW xxx AS SELECT Title,作者FROM Books WHERE(標題+作者)不是NULL,然後在該視圖上創建索引 – Kristen 2009-02-19 21:39:12

+0

感謝Kirsten,那是非常有用的信息! – JacobE 2009-02-26 13:00:57

回答

35

創造一個獨特的約束規則更清晰的說明。該指數的isUnique設置屬性是一個實現細節 - 規則是如何實現的,不什麼的規則。但效果是一樣的。

0

唯一索引是唯一鍵。

6

只是讓你知道,當你創建一個唯一約束SQL Server將創建場景

7

後面的指數還有就是2 唯一約束之間有着明顯的區別定義了列的組合必須是獨特。 唯一索引只是確保上述內容始終有效的一種方式。 但有可能有一個非唯一索引支持一個唯一的約束。 (如果約束條件不成立=僅在提交時有效,但允許在事務處理中斷)

4

我剛剛發現的一個難題是SSMS腳本中的唯一鍵默認情況下設置爲true,但索引的腳本被設置爲False。當我使用SSMS的Script Table As上下文菜單時,我沒有得到我的唯一索引。

另外,如果類型設置爲唯一鍵,你不能改變「忽略重複鍵」的設置。首先,您將類型從唯一鍵更改爲索引,然後您可以將忽略重複鍵設置爲true。