SQL 主鍵

摘要:在本教程中,您將學習如何使用 SQL PRIMARY KEY 約束向表中新增主鍵。

SQL 主鍵約束簡介 #

主鍵是唯一標識表中每一行的一列或一組列。主鍵確保每一行都是唯一的。

一個表包含且僅包含一個主鍵。如果主鍵只包含一列,那麼該列被稱為主鍵列

如果主鍵包含兩列或更多列,這些列都是主鍵列。這種主鍵也稱為複合鍵

以下是主鍵的主要特徵:

  • 唯一性:主鍵列中的每個值都必須是唯一的。
  • 非空性:主鍵列不能包含 NULL
  • 不可變性:主鍵列中的值不應更改。

要建立主鍵,您可以使用 PRIMARY KEY 約束。

column1 datatype PRIMARY KEYCode language: SQL (Structured Query Language) (sql)

例如,以下語句使用 CREATE TABLE 語句建立一個名為 projects 的新表,並將 project_id 列作為主鍵列:

CREATE TABLE projects (
  project_id INT PRIMARY KEY,
  project_name VARCHAR(255) NOT NULL,
  start_date DATE NOT NULL,
  end_date DATE NOT NULL
);Code language: SQL (Structured Query Language) (sql)

試一試

在此示例中,我們在 project_id 列的定義中使用了 PRIMARY KEY 關鍵字。通常,PRIMARY KEY 約束也會隱式強制執行 NOT NULL 約束,但 SQLite 除外。

在此示例中,我們將 PRIMARY KEY 定義為列約束,因為我們在主鍵列的定義中聲明瞭它。

SQL 允許您將主鍵列定義為表約束,方法是在列列表之後指定它,如下所示:

CREATE TABLE IF NOT EXISTS projects (
  project_id INT,
  project_name VARCHAR(255) NOT NULL,
  start_date DATE NOT NULL,
  end_date DATE NOT NULL,
  PRIMARY KEY (project_id)
);Code language: SQL (Structured Query Language) (sql)

試一試

這種語法更適合定義包含兩列或更多列的主鍵。

例如,以下語句建立一個名為 project_assignments 的表,用於儲存分配給員工的專案:

CREATE TABLE project_assignments (
  project_id INT,
  employee_id INT,
  assigned_date DATE NOT NULL,
  PRIMARY KEY (project_id, employee_id)
);Code language: SQL (Structured Query Language) (sql)

試一試

主鍵約束名稱 #

在定義主鍵約束時,您可以使用 CONSTRAINT 子句為其分配一個名稱:

CONSTRAINT constraint_name
PRIMARY KEY(column1, column2, ...)Code language: SQL (Structured Query Language) (sql)

如果您沒有為 PRIMARY KEY 約束提供名稱,資料庫系統將為其生成一個預設名稱。

這個預設名稱可能因資料庫系統而異。下表顯示了不同資料庫系統中主鍵約束的預設名稱:

資料庫系統預設主鍵約束名稱
SQL ServerPK_TableName_HexadecimalSequence
MySQLPRIMARY
PostgreSQLTableName_pkey
OracleSYS_Cn (其中 n 是一個數字)
SQLitesqlite_autoindex_TableName_n

以下示例建立一個名為 project_milestones 的表來儲存專案里程碑:

CREATE TABLE project_milestones (
  milestone_id INT,
  project_id INT NOT NULL,
  milestone_name VARCHAR(255) NOT NULL,
  CONSTRAINT project_milestones_pk PRIMARY KEY (milestone_id)
);Code language: SQL (Structured Query Language) (sql)

在此示例中,我們明確將主鍵約束命名為 project_milestones_pk

從表中刪除主鍵 #

要從表中刪除主鍵,您可以使用 ALTER TABLE 語句:

ALTER TABLE table_name
DROP CONSTRAINT primary_key_constraint;Code language: SQL (Structured Query Language) (sql)

在此語法中:

  • 首先,指定要從中刪除主鍵的表名。
  • 其次,提供主鍵約束的名稱。

要查詢主鍵約束名稱,您可以使用資料庫系統中的特定命令進行搜尋。

例如,以下語句從 project_milestones 表中刪除主鍵:

ALTER TABLE project_milestones 
DROP CONSTRAINT project_milestones_pk ;Code language: SQL (Structured Query Language) (sql)

試一試

在此語句中,project_milestones_pkproject_milestones 表主鍵的約束名稱。

某些資料庫系統(如 MySQL)不需要主鍵約束名稱。刪除主鍵約束的語法如下:

ALTER TABLE table_name
DROP PRIMARY KEY;Code language: SQL (Structured Query Language) (sql)

向現有表新增主鍵 #

SQL 允許您建立一個沒有主鍵的表。但是,這並不是一個好習慣。

要向現有表新增主鍵,您可以使用 ALTER TABLE 語句:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name 
PRIMARY KEY (column1, column2, ...);Code language: SQL (Structured Query Language) (sql)

在此語法中:

  • 首先,指定要新增主鍵的表名。
  • 其次,(可選)提供一個約束名稱。
  • 第三,在 PRIMARY KEY 子句中列出一個或多個主鍵列。

例如,以下語句向 project_milestones 表新增一個主鍵約束:

ALTER TABLE project_milestones
ADD PRIMARY KEY (milestone_id);Code language: SQL (Structured Query Language) (sql)

試一試

摘要 #

  • 主鍵是唯一標識表中每一行的一列或一組列。
  • 使用 PRIMARY KEY 約束為表定義主鍵。
  • 使用 ALTER TABLE .... ADD PRIMARY KEY 語句向現有表新增主鍵。
  • 使用 ALTER TABLE ... DROP CONSTRAINT 語句從表中刪除主鍵。

資料庫 #

測驗 #

本教程是否有幫助?
© .