Mysql 简明教程

MySQL - Primary Key

PRIMARY KEY 是应用于 MySQL 表字段的约束。当应用时,该特定表列中的值唯一标识。它是作为任何表的主键的最合适的候选键。

一个表只能有一个 PRIMARY KEY,其中可能包含单一或多个字段。当使用多个字段作为主键时,它们被称为复合键。

您可以在创建新表时创建主键,或将其应用到数据库中已存在的表中。但如果将它应用到现有表,则必须确保该表尚未包含主键。

Creating MySQL Primary Key

要在新 MySQL 表上创建主键,必须在使用 CREATE TABLE 语句创建新表时将列指定为 PRIMARY KEY。

以下是创建表时记住的一些要点 −

  1. 主键列只能包含唯一值。

  2. 它不能保存 NULL 值。

  3. 一张表格只能有一个主键。

  4. 主键长度不能超过 900 个字节。

Syntax

以下是将表格的列定义为主键的语法:

CREATE TABLE table_name(
   column_name NOT NULL PRIMARY KEY(column_name)
);

Example

在以下示例中,让我们使用 CREATE TABLE 查询在 MySQL 数据库中创建一个名为 CUSTOMERS 的表。在此查询中,我们将对名为 ID 的列添加 PRIMARY KEY 约束。

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25) UNIQUE,
   SALARY DECIMAL (18, 2),
   PRIMARY KEY(ID)
);

Output

显示的表结构将在 ADDRESS 列上包含一个 UNI 索引,如下所示 −

Verification

要进一步验证 PRIMARY KEY 约束是否应用于 ID 列,让我们使用以下查询将不同类型的值插入 CUSTOMERS 表中 −

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 23, 'Pune', 2000.00),
(1, 'John', 25, 'Hyderabad', 3000.00);

显示了以下错误 −

ERROR 1062 (23000): Duplicate entry '1' for key 'customers.PRIMARY'

正如我们在上面看到的那样,您不能将重复值和空值插入到此主键列中。

Creating Primary Key on Existing Column

我们还可以对表的现有列添加主键,如果创建新表时出于任何原因未创建主键。但是,仅当表尚未包含主键(因为 MySQL 表不得包含多个主键)且要应用它的列只包含唯一值时,才能对现有表添加主键。

您可以使用 ALTER TABLE…​ ADD CONSTRAINT 语句向现有表中添加主键。

Syntax

以下是在表的现有列上创建唯一约束的语法:

ALTER TABLE table_name
ADD CONSTRAINT
PRIMARY KEY (column_name);

Example

使用 ALTER TABLE 语句,您可以在先前创建的 CUSTOMERS 表中的现有列上添加 PRIMARY KEY。在以下示例中,我们对 ID 列应用 PRIMARY KEY,如下所示 −

ALTER TABLE CUSTOMERS
ADD CONSTRAINT
PRIMARY KEY (ADDRESS);

Output

显示的表结构将在 ADDRESS 列上包含一个 UNI 索引,如下所示 −

但是,如果添加 PRIMARY KEY 的列包含重复值或空值,则不能将其设置为主键。

Dropping MySQL Primary Key

MySQL 提供了 ALTER TABLE…​ DROP 语句以从表中删除主键。

Syntax

以下是使用 ALTER TABLE…​ DROP 语句删除 PRIMARY KEY 约束的语法:

ALTER TABLE table_name DROP PRIMARY KEY;

Example

让我们考虑具有名为 ID 的列上的主键约束的 CUSTOMERS 表。您可以通过执行以下语句来删除列 ID 上的此约束:

ALTER TABLE CUSTOMERS DROP PRIMARY KEY;

Output

显示的表结构将在 ADDRESS 列上包含一个 UNI 索引,如下所示 −

Creating Primary Key Using Client Program

我们还可以使用客户端程序对表字段应用主键。

Syntax

Example

以下是这些程序 −