SQL - 主键


SQL 主键

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

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

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

下图是保存客户个人详细信息的 CUSTOMERS 表的图表。正如我们所观察到的,主键是在 CUST_ID 列上定义的。使用这个主键,我们可以检索任何客户的唯一记录。

首要的关键

需要记住的要点

以下是主键的一些要点 -

  • 它仅包含唯一值。

  • 它不能为空。

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

  • 主键长度不能超过 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'

同样,主键列不能包含空值。在这里,我们使用 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 考希克 23 科塔 2000.00
3 柴塔利 25 孟买 6500.00
3 哈迪克 27 博帕尔 8500.00
3 科马尔 22 海得拉巴 4500.00
3 莫菲 24 印多尔 10000.00