SQL - 主键



SQL 主键

SQL 的主键是用于唯一标识数据库表中每条记录的列(或列的组合)。主键还可以加快数据访问速度,并用于在表之间建立关系。

尽管一个表只能有一个主键,但它可以在一个或多个字段上定义。当在表的多个字段上创建主键时,称为复合键

假设您正在开发一个名为“客户管理系统”的应用程序,用于处理仅限会员度假村的所有客户数据。这些数据可以包括他们的个人详细信息、分配的会员 ID、他们选择的会员资格的其他详细信息等。在该数据库中创建的所有表中,会员 ID 用于区分不同的客户。因此,此字段将成为主键。

以下是包含客户个人详细信息的 CUSTOMERS 表的图表。我们可以看到,主键是在 CUST_ID 列上定义的。使用此主键,我们可以检索任何客户的唯一记录。

Primary Key

要点

以下是 PRIMARY KEY 的一些要点:

  • 它只包含唯一值。

  • 它不能为 null。

  • 一个表只能有一个主键。

  • 主键长度不能超过 900 字节。

创建 SQL 主键

使用CREATE TABLE 语句创建表时,只需通过指定列名以及关键字“PRIMARY KEY”即可在表的特定列上添加主键约束。

语法

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

CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY(column_name)
);

示例

在以下示例中,我们尝试在 SQL 数据库中创建一个名为 CUSTOMERS 的表,其中包含各种字段。在创建表时,我们将在名为 ID 的列上添加约束“PRIMARY KEY”。

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

输出

以下是上述 SQL 语句的输出:

Query OK, 0 rows affected (0.03 sec)

验证

我们知道主键值必须唯一,因此您不能插入具有相同 ID 的记录。在这里,我们将通过插入具有重复 ID 值的记录来验证在 ID 列上创建的约束。

首先,让我们向 CUSTOMERS 表中插入一条记录:

INSERT INTO CUSTOMERS VALUES
(3, 'Kaushik', 23, 'Kota', 2000.00); 

现在,让我们再插入一条具有相同 ID 的记录:

INSERT INTO CUSTOMERS VALUES 
(3, 'Chaitali', 25, 'Mumbai', 6500.00);

如上所述,如果数据库表中的任何字段/列被定义为主键,则两条记录不能在该列/字段中具有相同的值。因此,第二个插入语句会生成以下错误:

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

类似地,主键列不能包含 null 值。在这里,我们使用 INSERT 语句将 NULL 值传递给主键列 (ID)。

INSERT INTO CUSTOMERS VALUES
(NULL, 'Komal', 22, 'Hyderabad', 4500.00); 

此语句会生成以下错误:

ERROR 1048 (23000): Column 'ID' cannot be null

在现有列上创建主键

我们还可以使用ALTER TABLE语句在表的现有列上添加 PRIMARY KEY 约束。

语法

以下是创建现有列上的主键约束的语法:

ALTER TABLE table_name ADD CONSTRAINT PRIMARY KEY (column_name);

示例

在此示例中,我们在现有 CUSTOMERS 表的 NAME 列上添加 PRIMARY KEY 约束:

ALTER TABLE CUSTOMERS ADD CONSTRAINT PRIMARY KEY(NAME);

输出

以下是上述语句的输出:

Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

删除 SQL 主键

如果可以在表的列中添加主键约束,则也可以删除它。这是通过使用 ALTER TABLE... DROP 语句完成的。

语法

以下是 ALTER TABLE 语句的语法,可用于从表的列中删除主键约束:

ALTER TABLE table_name DROP PRIMARY KEY;

示例

让我们考虑 CUSTOMERS 表,我们已在名为 ID 的列上创建了主键约束。您可以通过执行以下语句从列 ID 中删除此约束:

ALTER TABLE CUSTOMERS DROP PRIMARY KEY;

输出

上述 SQL 查询产生以下输出:

Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

验证

由于我们已从名为 ID 的列中删除了主键,因此我们可以插入多条具有相同 ID 的记录。以下语句插入四条具有相同 ID 的记录:

INSERT INTO CUSTOMERS VALUES 
(3, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(3, 'Hardik', 27, 'Bhopal', 8500.00 ),
(3, 'Komal', 22, 'Hyderabad', 4500.00 ),
(3, 'Muffy', 24, 'Indore', 10000.00 );

如果您验证此表的内容,则可以找到多条具有相同 ID 的记录:

SELECT * FROM CUSTOMERS;

表将显示为:

ID 姓名 年龄 地址 薪资
3 Kaushik 23 Kota 2000.00
3 Chaitali 25 孟买 6500.00
3 Hardik 27 博帕尔 8500.00
3 Komal 22 海德拉巴 4500.00
3 Muffy 24 因多尔 10000.00
广告

© . All rights reserved.