在本教學中,您將學習如何使用MySQL主鍵(Primary Key)約束來建立表的主鍵。
MySQL主鍵(Primary Key)是唯一標識表中每行的列或一組列。當定義表的主鍵時,必須遵循以下規則:
NULL
值。 這意味著必須使用NOT NULL
屬性宣告主鍵列。如果沒有指定NOT NULL
,MySQL將強制為主鍵列為NOT NULL
。因為MySQL使用整數工作更快,所以主鍵列的資料型別應該是整數型別,例如:INT
,BIGINT
。可以選擇一個較小的整數型別:TINYINT
,SMALLINT
等。但是,應該確保值的範圍的主鍵的整數型別足以儲存表可能所具有最大行數。
主鍵列通常具有自動生成鍵的唯一序列的AUTO_INCREMENT
屬性。下一行的主鍵值大於前一個行的主鍵值。
MySQL為表中的主鍵建立一個名為PRIMARY
的PRIMARY
索引型別。
MySQL允許通過在建立或修改表時定義主鍵約束來建立主鍵。
使用CREATE TABLE語句定義MySQL PRIMARY KEY約束
當使用CREATE TABLE語句建立表時,MySQL允許建立主鍵。要為表建立PRIMARY KEY
約束,請在主鍵列的定義中指定PRIMARY KEY
。
以下範例將為users
表的user_id
列上建立主鍵:
USE testdb;
CREATE TABLE users(
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(40),
password VARCHAR(255),
email VARCHAR(255)
);
還可以在CREATE TABLE
語句的末尾指定PRIMARY KEY
,如下所示:
USE testdb;
CREATE TABLE roles(
role_id INT AUTO_INCREMENT,
role_name VARCHAR(50),
PRIMARY KEY(role_id)
);
如果主鍵由多個列組成,則必須在CREATE TABLE
語句的末尾指定它們。在PRIMARY KEY
關鍵字之後,將逗號分隔的主鍵列的列表在括號內。
CREATE TABLE userroles(
user_id INT NOT NULL,
role_id INT NOT NULL,
PRIMARY KEY(user_id,role_id),
FOREIGN KEY(user_id) REFERENCES users(user_id),
FOREIGN KEY(role_id) REFERENCES roles(role_id)
);
除了建立由user_id
和role_id
列組成的主鍵之外,該語句還建立了兩個外來鍵約束。
使用ALTER TABLE語句定義MySQL PRIMARY KEY約束
如果表由於某些原因沒有主鍵,可以使用ALTER TABLE語句將具有所有主鍵的列新增到主鍵中,如下語句:
ALTER TABLE table_name
ADD PRIMARY KEY(primary_key_column);
以下範例將id
列新增到主鍵。
首先,建立t1
表但不定義主鍵。
CREATE TABLE t1(
id int,
title varchar(255) NOT NULL
);
其次,將id
列作為t1
表的主鍵。
ALTER TABLE t1
ADD PRIMARY KEY(id);
KEY
是INDEX
的同義詞。當要為列建立索引,但不是主鍵或唯一鍵時使用KEY
。
UNIQUE
索引為其值必須是唯一的列建立約束。與PRIMARY
索引不同,MySQL在UNIQUE
索引中允許有NULL
值。 一個表也可以有多個UNIQUE
索引。
例如,users
表中的使用者的email
和username
必須是唯一的。可以為email
和username
列定義UNIQUE索引,如下語句所示:
在username
列上新增UNIQUE
索引。
ALTER TABLE users
ADD UNIQUE INDEX username_unique (username ASC) ;
在email
列上新增UNIQUE
索引。
ALTER TABLE users
ADD UNIQUE INDEX email_unique (email ASC) ;
在本教學中,您已經學習了如何為新表建立主鍵或為現有表新增主鍵。