回答
主鍵和唯一鍵是實體完整性約束
主鍵允許表中的每一行進行唯一標識,並確保沒有重複的行存在,並且沒有輸入空值。
唯一鍵約束用於防止表中行的鍵值重複並允許空值。 (在oracle中,一個null不等於另一個null)。
- KEY或INDEX是指一個正常的非唯一索引。索引的非重疊值是允許的,因此索引可能包含索引所有列中具有相同值的行。這些索引不會對您的數據執行任何結構,因此它們僅用於加快查詢速度。
- UNIQUE指索引中所有行必須唯一的索引。也就是說,對於此索引中的所有列,同一行可能不具有與另一行相同的非NULL值。除了用於加快查詢速度外,UNIQUE索引還可用於強制執行數據結構,因爲數據庫系統不允許在插入或更新數據時破壞此不同值規則。您的數據庫系統可能允許在允許NULL值的列上使用UNIQUE索引,在這種情況下,如果兩行都包含NULL值(NULL被認爲不等於自身),則允許兩行相同,儘管這可能是不受歡迎的,具體取決於您的應用。
- PRIMARY的行爲與UNIQUE索引完全相同,除了它總是被命名爲「PRIMARY」,並且在表上可能只有一個(並且總是應該有一個;儘管一些數據庫系統不強制執行此操作)。 PRIMARY索引旨在用作唯一標識表中任何行的方法,因此不應將其用於允許NULL值的任何列。您的PRIMARY索引應始終位於足以唯一標識一行的最小列數上。通常,這只是一列包含一個唯一的自動遞增數字,但如果還有其他任何可以唯一標識一行的列(如國家/地區列表中的「countrycode」),則可以使用該列。
- FULLTEXT索引與上述不同,它們在數據庫系統中的行爲差異更大。與上面三種典型的b-tree(允許從最左列開始選擇,排序或範圍開始)或散列(允許從最左列開始選擇)不同,FULLTEXT索引僅用於全文搜索MATCH()/ AGAINST()子句。
看到Differences between INDEX, PRIMARY, UNIQUE, FULLTEXT in MySQL?
這裏有你一些參考:
Primary & foreign key Constraint.
主鍵:主鍵是字段的字段 或組合唯一 標識一個表中的記錄,以便 單個記錄可以位於 沒有混淆。
外鍵:外鍵(有時稱爲引用鍵 )是用於將兩個錶鏈接在一起的鍵 。 通常情況下,您從一個表中獲取主鍵 字段,並將其 插入另一個表,其中它變爲 外鍵(它仍然是原始表中的主鍵 鍵)。
Index另一方面,是一種屬性,您可以將其應用於某些列,以便可以加快在這些列上完成的數據檢索。
鍵/索引:一個鍵是一個邏輯數據庫設計的一個方面中,一個索引是物理數據庫設計的一個方面。關鍵字與完整性約束相對應,索引是一種物理記錄值的技術,可以在執行這些約束時有用地應用這些值。
主鍵/外鍵:「主鍵」是一組屬性,其值必須形成整個表中唯一的組合。可以有多個這樣的組合(> 1個鍵),而「主要」這個詞是早期設計師被迫選擇多個鍵中的一個作爲「最重要/最重要」的剩餘部分。 。原因主要是與外鍵結合使用:
與「主鍵」一樣,「外鍵」也是一組屬性。這些屬性的值必須組成一個組合,它是被引用表中現有的主鍵值。我不知道這條規則今天在SQL中究竟有多嚴格。無論如何,術語仍然存在。
唯一:用於指示索引不能接受重複條目的關鍵字。唯一索引顯然是強制執行主鍵的極好方法。如果在LOGICAL設計的上下文中使用「unique」這個詞,這是多餘的,草率的,不必要的和混亂的。按鍵(即主鍵)根據定義是唯一的。
主鍵:唯一標識每行 它不能爲空。 它不能重複。
外鍵: 創建兩個表之間的關係。 可以爲空。 可以是重複的
是否所有的外鍵都是其他關係的主鍵?如果不是,那麼null屬性將如何唯一標識。 – sidgupta234 2016-06-24 12:51:06
1)一種primary key
是一組一個或多個屬性的唯一識別關係中的元組。
2)foreign key
是一組從關係方案,其可被唯一地識別的元組氟利昂另一關係方案屬性。
元組是標識對象特徵的數據值的集合。 – 2012-02-04 14:17:10
- 主鍵是一列或一組列,用於唯一標識表中的一行。主鍵應該簡短,穩定和簡單。外鍵是表中的字段(或字段集合),其值必須與第二個表的主鍵的值相匹配。通常,外鍵位於與要求匹配其主鍵的表不同的表中。一個表可以有多個外鍵。
- 主鍵不能接受空值。外鍵可以接受多個。
- 我們在表中只能有一個主鍵。我們可以在一個表中有多個外鍵。
- 默認情況下,主鍵是聚簇索引,數據庫表中的數據按聚簇索引的順序進行物理組織。外鍵不會自動創建索引,聚簇或非聚簇。您可以手動創建外鍵索引。
主鍵主要是防止重複和顯示的列的唯一性 外鍵主要表現在兩個表的關係
- 1. 主鍵,唯一鍵和候選鍵之間的區別
- 2. 只有主鍵和主鍵約束有什麼區別?
- 3. 主鍵約束與主鍵序列之間的區別?
- 4. SQL Server中主鍵和唯一索引之間的區別
- 5. 唯一約束和唯一索引之間的區別是什麼
- 6. Rails中外鍵約束和引用之間的區別
- 7. 添加列作爲外鍵和作爲約束之間的區別是什麼
- 8. 主鍵與唯一約束?
- 9. 唯一約束外鍵列
- 10. cassandra中的行鍵,主鍵和索引有什麼區別?
- 11. 唯一性索引和約束/與主鍵的關係
- 12. 「關鍵部分」,「關鍵區域」和「約束執行區域」之間的區別
- 13. SQL Server中主鍵(集羣)和集羣唯一索引之間的區別
- 14. 紅移約束(主鍵和外鍵約束)
- 15. Android - 具有唯一鍵和外鍵約束的Sqlite查詢
- 16. 什麼可以禁用外鍵約束?
- 17. Doctrine中外鍵的唯一約束
- 18. 約束符號與外鍵索引名稱 - >有什麼區別?
- 19. 外鍵:與外鍵約束
- 20. 外鍵可以唯一主鍵
- 21. MySQL軟刪除,唯一鍵和外鍵約束
- 22. 在外鍵約束列上創建非唯一索引
- 23. 唯一約束複合主鍵在JPA
- 24. 多列主鍵或唯一約束?
- 25. 外鍵和主鍵Postgres和索引
- 26. 爲什麼創建引用主鍵字段中同一表的主鍵的外鍵約束
- 27. innodb和外鍵 - 外鍵約束失敗
- 28. 外鍵和引用鍵有什麼區別?
- 29. 違反唯一鍵約束
- 30. 在唯一鍵約束
注:SQL Server的唯一約束和索引處理空值,如果他們是平等的,這樣「在這種情況下,如果兩行都包含NULL值,則允許兩行相同。「對於SQL Server不是這樣。 – 2009-11-07 23:29:54