在本教學中,將介紹主鍵以及如何使用SQL PRIMARY KEY
約束向表中新增主鍵。
表由列和行組成。 通常,表具有一列或多列,列的值唯一地標識表中的每一行。 此列或多列稱為主鍵。
由兩列或更多列組成的主鍵也稱為複合主鍵。
請參閱以下課程(courses
)表。
由於course_id
列中的值唯一標識courses
表中的第一行,因此course_id
列是courses
表的主鍵。
每個表都有一個且只有一個主鍵。 主鍵不接受NULL
或重複值。如果主鍵由兩列或更多列組成,則值可能在一列中重複,但主鍵中所有列的值組合必須是唯一的。
請參閱以下培訓(training
)表。
training
表的主鍵包含employee_id
和course_id
列。course_id
列中的值是重複的,但employee_id
和course_id
中的值組合不是重複的。
通常,在建立表時定義主鍵。 如果主鍵由一列組成,則可以使用PRIMARY KEY
約束作為列或表約束。 如果主鍵由兩列或更多列組成,則必須使用PRIMARY KEY
約束作為表約束。
假設要在資料庫中管理公司的專案和專案分配。 則需要建立兩個表:projects
和project_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_id
和employee_id
,因此必須使用PRIMARY KEY
作為表約束。
首先,使用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);
一般很少刪除表的主鍵。 但是,如果必須這樣做,可以使用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;
在本教學中,我們介紹了主鍵概念,並向展示了如何管理表的主鍵,包括新增和刪除主鍵。