回答
不同之處在於: 主鍵默認會創建聚簇索引,並且一個表中只能存在一個PK。主鍵可以覆蓋多個列(複合鍵)
沒有兩個不相同,但是相似,當列是唯一的時,它具有唯一值,但它也允許該列中有一個Null值,但是Primary不允許任何空值。主鍵可用於其他表中的參考。
在聲明UNIQUE約束只能有一個表中的但多個唯一鍵
主鍵,SQL Server創建唯一索引加快尋找重複的過程。在這種情況下,索引默認爲NONCLUSTERED索引,因爲每個表只能有一個CLUSTERED索引。
- 每個表的唯一約束數受限於表上的索引數,即249 NONCLUSTERED索引和一個可能的CLUSTERED索引。
與PRIMARY鍵相反,UNIQUE約束可以接受NULL而只是一次。如果約束是在字段組合中定義的,那麼每個字段都可以接受NULL,並且可以有一些值,只要組合值是唯一的。
快樂編碼!
「UNIQUE約束可以接受NULL但只是一次」:與AvatarKava所說的相矛盾:UNIQUE鍵可能爲NULL,並且允許多個NULL值。哪一個? – Thilo 2010-03-16 06:23:52
From:http://dev.mysql.com/doc/refman/5.0/en/create-index.html UNIQUE索引創建一個約束條件,以便索引中的所有值都必須是不同的。如果嘗試使用與現有行匹配的鍵值添加新行,則會發生錯誤。此約束不適用於除BDB存儲引擎以外的NULL值。對於其他引擎,UNIQUE索引允許可以包含NULL的列的多個NULL值。如果您爲UNIQUE索引中的列指定前綴值,則列值在前綴中必須是唯一的。 – AvatarKava 2010-03-16 06:30:40
這個問題被標記爲「mysql」,但我相信Oracle還允許多個NULL值(兩個NULL永遠不會相等)。這似乎是更自然的慣例。 – Thilo 2010-03-16 06:35:03
沒有。將列設置爲唯一與將其設置爲主鍵或主鍵的一部分非常不同。
沒有。
PRIMARY KEY必須是唯一的,但UNIQUE鍵不一定是主鍵。你可以在一個表中有多個UNIQUE鍵。
關鍵的區別是PRIMARY鍵不能有NULL值,因爲它們必須唯一標識一行。 UNIQUE鍵可能是NULL,並且允許多個NULL值(除非您使用像BDB這樣的非常見表引擎)。
呃這是一個無意的可怕的雙關語。 – AvatarKava 2010-03-16 06:08:56
我似乎記得試圖在表上創建一個唯一的索引,並且因爲多個NULL值而無法訪問,但我必須絆倒。 – Duncan 2010-03-16 06:25:11
可能已經回到了4.x,鄧肯 - 我相信他們確實有那個約束:http://dev.mysql.com/doc/refman/5.0/en/create-index.html – AvatarKava 2010-03-16 06:31:26
UNIQUE仍然可以爲NULL。
PRIMARY KEY表示UNIQUE和NOT NULL,每個表只能有一個PRIMARY KEY。
不,它們不是等價的。唯一鍵可能具有空值,但主鍵不允許具有空值。 以下是說明差異的鏈接 http://sqlhints.com/2013/06/02/difference-between-primary-key-and-unique-key-in-sql-server/
- 1. MySQL不尊重UNIQUE和PRIMARY-KEY
- 2. RowGuide和UNIQUE KEY
- 3. MySQL。同一字段的UNIQUE和PRIMARY KEY約束
- 4. MySQL KEY/UNIQUE KEY
- 5. UNIQUE INDEX和UNIQUE KEY有什麼區別?
- 6. UNIQUE和UNIQUE KEY之間的區別mySQL
- 7. PRIMARY KEY和FOREIGN KEY到我的表
- 8. 如何確定哪個UNIQUE索引在Oracle中實施PRIMARY KEY
- 9. SQL AUTO_INCREMENT PRIMARY KEY僅適用於UNIQUE名稱字段
- 10. 如何在沒有UNIQUE索引或PRIMARY KEY的MySQL中使用ON DUPLICATE KEY UPDATE?
- 11. SQLite typlessness和PRIMARY KEY更改
- 12. 選擇PRIMARY KEY
- 13. ORMlite alter primary key
- 14. MySql:Composite Unique Key
- 15. 使用KEY或UNIQUE KEY的決定
- 16. PostgreSQL:是否可以爲PRIMARY KEY或UNIQUE提供自定義名稱?
- 17. UNIQUE,UNIQUE KEY和CONSTRAINT'name'UNIQUE之間有什麼區別?
- 18. 違反PRIMARY KEY約束
- 19. SQLite:INSERT或REPLACE w/null PRIMARY KEY
- 20. 違反PRIMARY KEY約束'PK _ *%$ ^&'
- 21. SQL ALTER TABLE ADD PRIMARY KEY error1064
- 22. 違反PRIMARY KEY約束「PK_
- 23. UNIQUE KEY以任何順序
- 24. Spring Data JPA:findOne with unique key
- 25. MySql`id`列有'PRIMARY'和'UNIQUE'索引,這是理想嗎?
- 26. SQL PRIMARY KEY重複錯誤與3個表中的PRIMARY KEY相同
- 27. 違反PRIMARY KEY約束插入空表
- 28. 在Android中重置INTEGER PRIMARY KEY AUTOINCREMENT
- 29. MysQL忽略int值 - 重複項「KEY PRIMARY」
- 30. postgres中的timetravel - 違反PRIMARY KEY約束
您可以擁有跨越多個列的唯一約束。 – Thilo 2010-03-16 06:05:27