mysql
好文記錄與分享 軟體開發隨筆

[好文分享] MySQL 中 key, primary key, unique key 與 index 區別

商業,創業,業務,職涯,美食,葡萄酒,閱讀,網路科技。

從 Larry 創業以及商業的經驗,希望以白話的口吻,介紹給大家這個商業的世界。

FB粉專會頻繁地更新 Larry 對於商業、社會、人生的觀察與心得,歡迎大家追蹤互動~

圖片來源 https://zh.wikipedia.org/wiki/MySQL

之前看到一篇關於 MySQL index / key 的文章,以中文 MySQL 文章來說,larry 覺得寫得滿好的,分享給大家
https://blog.csdn.net/nanaMasuda/article/details/52543177
(文章內的「索引」就是 index)

“索引被用來快速找出在一個列上用一特定值的行。沒有索引,MySQL不得不首先以第一條記錄開始並然後讀完整個表直到它找出相關的行。”

文章第一句就點出 index 的主要功能:快速檢索。為啥可以快速檢索?因為 MySQL index 會建一物理結構 BTree, 加快檢索,也可以想成是用空間換取速度。

Key 與 index 的差異?Key 包含了兩個功能

  1. 約束 (constraint)
  2. 索引 (index), 也就是 key 功能上包含了 index.

Primary key 來說,他的特性是

  1. Unique constraint.
  2. Each table can only have one Primary key.
  3. Cannot be null.

Unique key 來說,他的特性是

  1. Unique constraint.
  2. Each table can have multiple Unique keys.
  3. Can be null.

當然,記得所有的 key 都包含 index 的功能。Unique key 能否為 null 這部分,larry 有做一些實驗跟查找文章
http://www.mysqltutorial.org/mysql-unique/

“Unlike other database systems, MySQL considers NULL values as distinct values. Therefore, you can have multiple NULL values in the UNIQUE index.

This is how MySQL was designed. It is not a bug even though it was reported as a bug.”

所以以 MySQL 來說,Unique key 是可以為 null 的。

相關文章:MySQL server 在 Mac 上關不掉的問題

商業,創業,業務,職涯,美食,葡萄酒,閱讀,網路科技。

從 Larry 創業以及商業的經驗,希望以白話的口吻,介紹給大家這個商業的世界。

FB粉專會頻繁地更新 Larry 對於商業、社會、人生的觀察與心得,歡迎大家追蹤互動~