SQL主鍵約束


在本教學中,將介紹主鍵以及如何使用SQL PRIMARY KEY約束向表中新增主鍵。

1. SQL中的主鍵是什麼?

表由列和行組成。 通常,表具有一列或多列,列的值唯一地標識表中的每一行。 此列或多列稱為主鍵。

由兩列或更多列組成的主鍵也稱為複合主鍵。

請參閱以下課程(courses)表。

由於course_id列中的值唯一標識courses表中的第一行,因此course_id列是courses表的主鍵。

每個表都有一個且只有一個主鍵。 主鍵不接受NULL或重複值。如果主鍵由兩列或更多列組成,則值可能在一列中重複,但主鍵中所有列的值組合必須是唯一的。

請參閱以下培訓(training)表。

training表的主鍵包含employee_idcourse_id列。course_id列中的值是重複的,但employee_idcourse_id中的值組合不是重複的。

2. 使用PRIMARY KEY建立表

通常,在建立表時定義主鍵。 如果主鍵由一列組成,則可以使用PRIMARY KEY約束作為列或表約束。 如果主鍵由兩列或更多列組成,則必須使用PRIMARY KEY約束作為表約束。

假設要在資料庫中管理公司的專案和專案分配。 則需要建立兩個表:projectsproject_assignments

以下語句建立專案(projects)表:

CREATE TABLE projects (
    project_id INT PRIMARY KEY,
    project_name VARCHAR(255),
    start_date DATE NOT NULL,
    end_date DATE NOT NULL
);

可以在列定義中新增PRIMARY KEY,以使project_id列成為projects表的主鍵。以下語句等效於上述語句,但它不使用PRIMARY KEY約束作為列約束,而是使用表約束。

CREATE TABLE projects (
    project_id INT,
    project_name VARCHAR(255),
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    CONSTRAINT pk_id PRIMARY KEY (project_id)
);

可以使用CREATE TABLE語句末尾的CONSTRAINT子句將project_id列指定為主鍵。

要儲存表示分配給哪個專案的專案分配,需要使用以下語句建立project_assignments表:

CREATE TABLE project_assignments (
    project_id INT,
    employee_id INT,
    join_date DATE NOT NULL,
    CONSTRAINT pk_assgn PRIMARY KEY (project_id , employee_id)
);

由於主鍵由兩列組成:project_idemployee_id,因此必須使用PRIMARY KEY作為表約束。

3. 使用ALTER TABLE語句新增主鍵

首先,使用CREATE TABLE語句定義沒有主鍵的表,儘管這不是一個好習慣。 然後,使用ALTER TABLE語句將主鍵新增到表中。

例如,以下語句建立沒有主鍵的project_milestones表。 project_milesones儲存專案的進度。

CREATE TABLE project_milestones(
    milestone_id INT,
    project_id INT,
    milestone_name VARCHAR(100)
);

現在,可以使用以下ALTER TABLE語句將milestone_id列設定為主鍵。

ALTER TABLE project_milestones
ADD CONSTRAINT pk_milestone_id PRIMARY KEY (milestone_id);

可以跳過CONSTRAINT子句,如下所示:

ALTER TABLE project_milestones
ADD PRIMARY KEY (milestone_id);

4. 刪除主鍵約束

一般很少刪除表的主鍵。 但是,如果必須這樣做,可以使用ALTER TABLE語句,如下所示:

ALTER TABLE table_name
DROP CONSTRAINT primary_key_constraint;

如果使用的是MySQL,則刪除主鍵的語法更簡單,如下所示:

ALTER TABLE table_name
DROP PRIMARY KEY;

例如,要刪除project_milestones表的主鍵約束,請使用以下語句。

ALTER TABLE project_milestones 
DROP CONSTRAINT pk_milestone_id;

在本教學中,我們介紹了主鍵概念,並向展示了如何管理表的主鍵,包括新增和刪除主鍵。