簡體   English   中英

MySQL中鍵、主鍵、唯一鍵和索引的區別

[英]Difference between Key, Primary Key, Unique Key and Index in MySQL

我什么時候應該使用KEYPRIMARY KEYUNIQUE KEYINDEX

KEYINDEX在 MySQL 中是同義詞。 他們的意思是一樣的。 在數據庫中,您將使用索引來提高數據檢索的速度。 通常在JOINWHEREORDER BY子句中使用的列上創建索引。

假設您有一個名為users的表,並且您想要搜索姓氏為“Smith”的所有用戶。 如果沒有索引,數據庫將不得不遍歷表的所有記錄:這很慢,因為數據庫中的記錄越多,查找結果所需的工作就越多。 另一方面,索引將幫助數據庫快速跳轉到保存“史密斯”記錄的相關頁面。 這與我們人類通過電話簿目錄查找姓氏的方式非常相似:我們不會從一個封面到另一個封面開始搜索目錄,只要我們按某種順序插入信息,我們就可以用於快速跳轉到“S”頁。

主鍵和唯一鍵類似。 主鍵是可以唯一標識行的一列或多列組合。 它是唯一鍵的特例。 一張表最多可以有一個主鍵,但可以有多個唯一鍵。 當您在列上指定唯一鍵時,表中任何兩個不同的行都不能具有相同的值。

另請注意,定義為主鍵或唯一鍵的列會在 MySQL 中自動編入索引。

KEY 和 INDEX 是同義詞。

當性能測量和 EXPLAIN 顯示查詢由於缺少索引而效率低下時,您應該添加索引。 添加索引可以提高查詢的性能(但會減慢對表的修改速度)。

當您希望將該列(或多列)中的值限制為唯一時,您應該使用 UNIQUE,以便嘗試插入重復值會導致錯誤。

PRIMARY KEY 既是唯一約束,也暗示該列不是 NULL。 它用於為每一行提供一個身份。 這對於通過外鍵約束與另一個表連接很有用。 雖然表不需要具有 PRIMARY KEY,但它通常是一個好主意。

主鍵不允許NULL值,但唯一鍵允許NULL值。

我們只能在一張表中聲明一個主鍵,但一張表可以有多個唯一鍵(列分配)。

PRIMARY KEYUNIQUE KEY是相似的,只是它們的功能不同。 主鍵使表行唯一(即,不能有 2 行具有完全相同的鍵)。 一個數據庫表中只能有 1 個主鍵。

唯一鍵使表行中的表列唯一(即,沒有 2 個表行可能具有完全相同的值)。 您可以擁有 1 個以上的唯一鍵表列(與主鍵不同,這意味着表中只有 1 個表列是唯一的)。

INDEX也創造了獨特性。 MySQL(示例)將為被索引的列創建一個索引表。 這樣,在該索引表列上查詢查詢時,可以更輕松地檢索表行值。 缺點是如果你做很多更新/刪除/創建,MySQL 必須管理索引表(這可能是一個性能瓶頸)。

希望這會有所幫助。

唯一鍵:沒有兩行相似的列

主鍵:可以唯一標識表中每一行的最小列數的集合(即構成主鍵的所有列中沒有兩行相似)。 一張表中可以有多個主鍵。 如果存在唯一鍵,則它是表中的主鍵(不是“主鍵”)。 如果不存在唯一鍵,那么將需要多個列值來標識行,例如 (first_name, last_name,father_name,mother_name) 可以在某些表中構成主鍵。

索引:用於優化查詢。 如果您要根據某個列多次搜索或排序結果(例如,大多數人將按姓名而不是他們的卷號搜索學生),那么如果列值全部為“索引”,例如使用二叉樹算法。

主鍵- 我們只能將表上的一個主鍵放入表中,並且在將值輸入表中時不能將該列留空。

唯一鍵- 我們可以在一張表上放置多個唯一鍵,當我們將值輸入到表中時,我們可以將該列留空。 當我們應用主鍵和唯一鍵時,列采用唯一值(不相同)。

主鍵用於處理不同的表。 這是關系數據庫的基礎。 如果您有圖書數據庫,最好創建 2 個表 - 1)圖書和 2)具有 INT 主鍵“id”的作者。 然后你在書中使用 id 而不是作者姓名。

如果您不想重復輸入,則使用唯一鍵。 例如,您的圖書表中可能有標題,並希望確保每個標題只有一個條目。

唯一鍵:

  1. 多個值可以為空。
  2. 任何兩個元組都不能在唯一鍵中具有相同的值。
  3. 一個或多個唯一鍵可以組合成一個主鍵,但反之則不然。

主鍵

  1. 可以包含多個唯一鍵。
  2. 唯一地代表一個元組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM