MySQL Primary Key約束

在本教學中,您將學習如何使用MySQL主鍵(Primary Key)約束來創建表的主鍵。

MySQL主鍵簡介

MySQL主鍵(Primary Key)是唯一標識表中每行的列或一組列。當定義表的主鍵時,必須遵循以下規則:

  • 主鍵必須包含唯一值。如果主鍵由多個列組成,則這些列中的值的組合必須是唯一的。
  • 主鍵列不能包含NULL值。 這意味著必須使用NOT NULL屬性聲明主鍵列。如果沒有指定NOT NULL,MySQL將強制為主鍵列為NOT NULL
  • 一張表只有一個主鍵。

因為MySQL使用整數工作更快,所以主鍵列的數據類型應該是整數類型,例如:INTBIGINT。可以選擇一個較小的整數類型:TINYINTSMALLINT等。但是,應該確保值的範圍的主鍵的整數類型足以存儲表可能所具有最大行數。

主鍵列通常具有自動生成鍵的唯一序列的AUTO_INCREMENT屬性。下一行的主鍵值大於前一個行的主鍵值。

MySQL為表中的主鍵創建一個名為PRIMARYPRIMARY索引類型。

定義MySQL主鍵約束

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_idrole_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);

PRIMARY KEY與UNIQUE KEY對比

KEYINDEX的同義詞。當要為列創建索引,但不是主鍵或唯一鍵時使用KEY

UNIQUE索引為其值必須是唯一的列創建約束。與PRIMARY索引不同,MySQL在UNIQUE索引中允許有NULL值。 一個表也可以有多個UNIQUE索引。

例如,users表中的用戶的emailusername必須是唯一的。可以為emailusername列定義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) ;

在本教學中,您已經學習了如何為新表創建主鍵或為現有表添加主鍵。


上一篇: MySQL數據類型 下一篇: MySQL技巧