iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
AI & Data

作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學系列 第 6

第六日- 資料限制(Constraint)資料表的身分證PRIMARY KEY 主鍵( PK)

  • 分享至 

  • xImage
  •  

今天介紹超級超級超級重要的PRIMARY KEY 主鍵,
簡稱PK。每一個資料表都只會有一個PK,
PK像是資料表的身分證字號,
具有「唯一值」、「不能是空值」的特性,
這兩個值聽起來是不是很熟悉?
對的,如果規定資料欄位是PK的話,
直接買一送二,送UNIQUE和NOT NULL的特性。

舉例而言:如果有一張表是便當店的菜單,欄位有便當名稱、價格、主菜,那主鍵會是便當名稱,因為主菜、價格可以重複,但便當名稱是不能重複的,便當名稱重複,就不知道客人是在點哪個了!

除此之外,PK可以被當作其他資料表的「外來鍵」,
如果一個資料表的某欄位設定內容必須是另外一張表的PK的值,
那這個欄位就有「外來鍵」FOREIGN KEY,FK的限制。

延續上一個例子,辦公室今天訂便當,訂便當單的欄位會有員工姓名、想訂的便當名稱、備註,是不是在訂的便當名稱這欄,會要求必須填的跟便當店的菜單一模一樣?這時就會限定訂便當單的便當名稱是外來鍵,對應到便當菜單的主鍵:便當名稱,員工就只能天寫便當店菜當上有的便當名稱,不能自創奇怪的菜名。

那主鍵只能是一個欄位嗎?其實不一定,主鍵可以是多個欄位。
聽起來不太容易理解,但其實就是不能有兩行資料,那幾欄的內容是一模一樣的。

舉例而言:複合主鍵可以想成我們的名字=姓氏+名字,
如果希望一個班級中沒有人的姓名是重複的,
就可以設定主鍵是「姓氏欄位」以及「名字欄位」,
這樣班上可以有很多姓王的同學,可以有很多叫做小美的同學,
但叫做王小美的同學,只能有一個。

PRIMARY KEY 主鍵

  • UNIQUE 唯一值
  • NOT NULL 不可以是空值
  • CLUSTERED INDEX 索引:讓資料系統更快找到資料
  • 一張資料表一個主鍵
  • 一個主鍵可包含一或多個欄位(組合鍵)
  • 別人的外來鍵

PK的寫法和UNIQUE一樣,寫上PRIMARY KEY後在後方括號加入欄位就可以了。

CREATE TABLE class
(id INT NOT NULL,
full_name NVARCHAR(30),
PRIMARY KEY (id));

如果是複合鍵的話,加上逗號填寫第二個以後的欄位即可。

CREATE TABLE class
(first_name NVARCHAR(30),
last_name NVARCHAR(30),
PRIMARY KEY (first_name,last_name));

如果你直接執行,SQL會報錯
Error Code: 1050. Table 'class' already exists
上面寫說這張叫做'class'的資料表已經存在了,
那要怎麼辦呢?
第一個可以選擇改名字,把名字改成class2,
或是我們可以刪掉原本的class 表,
複習一下第三日–CRUD初體驗,操作MySQL資料庫的操作語法,試著刪掉原本的class 表。

經過這幾天,我們大致介紹完CREATE TABLE中用的所有語法了,
明天會再看一次語法,然後試著自己創一張TABLE吧!


上一篇
第五日: 資料限制(Constraint)之一天到晚看到的UNIQUE和NOT NULL
下一篇
第七日- 資料限制:AUTO_INCREMENT,現在換你創一張資料表!
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言