2013-03-12 134 views
0

我需要在我的腦海中清除以下內容。唯一性索引和約束/與主鍵的關係

當我創建一個沒有主鍵或唯一約束的表時,我得到一個平面文件。
當我創建主鍵時,會創建一個主索引作爲結果,並且這個索引保持主鍵的唯一性,對嗎?所以我不能添加重複的值。
因此,如果我在任何列上創建索引,是否強制該列具有唯一值?或者,這取決於使用關鍵字UNIQUE進行索引創建?
最後,每次我聲明具有UNIQUE約束的列時,是否意味着索引已創建,因此這些操作是可以互換的?

回答

1
  1. 如果我們在任何列上創建索引,那麼這並不會強制 列具有唯一值。 列中可能有重複值,但這些值將被編入索引。
  2. 列中的唯一值將通過對列使用關鍵字UNIQUE 來強制執行。
  3. UNIQUE列和主鍵列之間的差異是 - UNIQUE鍵列可以在 表格行中的一個和唯一一箇中保存NULL值。主鍵列不會保留空值。
  4. 創建UNIQUE列時,隱式創建索引 。但是,如果在列上創建索引並不意味着 列的所有行值都將爲UNIQUE。所以他們不是 可互換。
+0

那麼,如果'INDEX UNIQUE'完全一樣的工作,那麼'UNIQUE'約束的目的是什麼? – Cratylus 2013-03-12 20:31:48

1

當我創建一個主索引作爲結果所創建的主鍵和 這是該指數維持在該主鍵的唯一性, 吧?

是,雖然主鍵索引是不完全一樣,唯一索引(它比「常規」唯一索引某些優先級。

所以,如果我創造的任何列的索引做這種強制列 具有獨特的價值?或者說,取決於使用關鍵字UNIQUE的 創建索引?

在表列不會自動限制的索引列中的值是唯一的,除非您明確使用UNIQUE INDEX

最後我每次申報具有唯一約束的列的時間不 這意味着創建了索引,因此這些行動是 互換?

通過UNIQUE INDEX創建一個唯一約束。他們是同一件事。

+0

因此,無論何時我創建一個'UNIQUE'在列上創建一個新的索引? – Cratylus 2013-03-12 18:41:07

+0

@Cratylus - 是的,在這種情況下'UNIQUE'是'UNIQUE KEY'的縮寫。 MySQL開發人員將KEY部分設爲可選項,以便於使用。 – Perception 2013-03-12 18:42:28

+0

因此,如果例如我聲明'INDEX UNIQUE'列'A','B'它是完全相同的創建一個複合主鍵?這也涉及到級聯,即參考完整性還是唯一性? – Cratylus 2013-03-12 18:44:34