如果我錯了,請更正。請向我指出關於這個概念的文章。SQL中的主鍵,索引和約束條件
當我們創建一個主鍵時,在後臺會自動創建一個唯一的索引,聚簇索引和一個非空約束。
這是否也意味着如果我們創建非空約束,[聚集索引或非聚集索引]和列上的唯一索引,那麼該列將成爲主鍵?
我想了解主鍵,索引和約束之間的核心概念/關係。
如果我錯了,請更正。請向我指出關於這個概念的文章。SQL中的主鍵,索引和約束條件
當我們創建一個主鍵時,在後臺會自動創建一個唯一的索引,聚簇索引和一個非空約束。
這是否也意味着如果我們創建非空約束,[聚集索引或非聚集索引]和列上的唯一索引,那麼該列將成爲主鍵?
我想了解主鍵,索引和約束之間的核心概念/關係。
主鍵是被聲明爲「主」鍵之一。只有具備這些特點並不能成爲關鍵的「主要」。它必須被明確地聲明。
不同的數據庫以不同的方式實現主鍵。雖然主鍵通常使用聚簇唯一索引實現,但這不是必需的。
主鍵正是顧名思義:「主」。任何其他列或列組都可以聲明爲unique
和not null
。這不會使他們成爲主鍵。在某些數據庫中,甚至可以定義另一列或一組列,如not null
,unique
和集羣 - 沒有那個主鍵。
總結:
有關更多詳細信息,請參閱您正在使用的數據庫的文檔。
如果您有多個包含非NULL唯一鍵的列,那麼只有一列是「主」 - 即已被顯式聲明爲主鍵的列。
爲什麼你會有一個非羣集主鍵?我可以舉一個場景。設想一個數據庫,其中UUID是行的關鍵字。該公司不希望使用自動生成的序列號,因爲它們提供了號碼中的信息。
但是,對於集羣索引而言,UUID是非常差的候選對象,因爲插入幾乎不會結束。在這種情況下,您可能希望使用集羣自動生成的順序鍵來設計表,以加快插入速度您可以將此鍵設爲主鍵。但是,您希望所有外鍵引用都使用UUID,並且您希望所有外鍵引用都是表的主鍵。
號
所有列可以用Not null
和Non-clustered index
和Unique
但只有ONE欄添加可以PK。
而Unique
允許NULL
而Primary Key
不允許。
你可能會談論Candidate Key
,這裏是裁判: https://www.techopedia.com/definition/21/candidate-key
Microsoft SQL SERVER – variable