MySQL Primary Key(主键)

MySQL 主键是单个字段或字段的组合,用于唯一标识表中的每条记录。如果列包含主键约束,则它不能为null 或为空。一个表可能有重复的列,但它只能包含一个主键。它始终在列中包含唯一值。

当您在表中插入新行时,主键列也可以使用AUTO_INCREMENT属性自动为该行生成一个序号。MySQL在表中定义一个主键后,会自动创建一个名为“ Primary ”的索引。由于它有关联的索引,我们可以说主键使查询性能快速。

一、MySQL Primary Key(主键)规则

以下是主键的规则:

  1. 主键列值必须是唯一的。
  2. 每个表只能包含一个主键。
  3. 主键列不能为空或为空。
  4. MySQL 不允许我们使用现有主键插入新行。
  5. 建议主键列使用 INT 或 BIGINT 数据类型。

我们可以通过两种方式创建主键:

  • CREATE TABLE 语句
  • ALTER TABLE 语句

二、CREATE TABLE创建主键 

在本节中,我们将了解如何使用CREATE TABLE语句创建主键。

语法

以下是用于在 MySQL 中创建主键的语法。如果我们只想在表中创建一个主键列,请使用以下语法:

CREATE TABLE table_name(  
    col1 datatype PRIMARY KEY,  
    col2 datatype,  
    ...  
);  

如果我们想在表中创建多个主键列,请使用以下语法:

CREATE TABLE table_name  
(  
  col1 col_definition,  
  col2 col_definition,  
  ...  
  
  CONSTRAINT [constraint_name]   
   PRIMARY KEY (column_name(s))  
);  

参数说明

参数名称 说明
table_name 它是我们要创建的表的名称。
col1、col 2 它是表中包含的列名。
constraint_name 它是主键的名称。
column_name 它将成为主键的列名。

三、MySQL Primary Key(主键) 示例

以下示例说明了如何在 MySQL 中使用主键。此语句创建一个名为“ Login ”的表,其“ login_id ”列包含主键:

mysql> CREATE TABLE Login(  
   login_id INT AUTO_INCREMENT PRIMARY KEY,  
   username VARCHAR(40),  
   password VARCHAR(55),  
   email VARCHAR(55)  
);  

接下来,使用插入查询将数据存储到表中:

mysql> INSERT INTO Login(login_id, username, password, email)   
VALUES (1,'Stephen', 15343434532, 'stephen@javatpoint.com'),   
(2, 'Joseph', 35435479495, 'Joseph@javatpoint.com');  
  
mysql> INSERT INTO Login(login_id, username, password, email)   
VALUES (1,'Peter', 15343434532, 'peter@javatpoint.com');  

在下面的输出中,我们可以看到第一个插入查询成功执行。而第二个插入语句失败并给出错误提示:Duplicate entry for the primary key column。

如果要在多个列上定义主键,请使用如下查询:

mysql> CREATE TABLE Students (  
        Student_ID int,   
        Roll_No int,  
        Name varchar(45) NOT NULL,   
        Age int,   
        City varchar(25),  
        Primary Key(Student_ID, Roll_No)  
    );  

在输出中,我们可以看到主键值包含两列Student_ID和Roll_No。

四、ALTER TABLE创建主键 

该语句允许我们对现有表进行修改。当表没有主键时,该语句用于将主键添加到现有表的列中。

以下是在 MySQL 中创建主键的 ALTER TABLE 语句的语法:

ALTER TABLE table_name ADD PRIMARY KEY(column_list); 

示例

以下语句在表定义中创建一个没有主键列的表“ Persons ”。

mysql> CREATE TABLE Persons (  
        Person_ID int NOT NULL,   
        Name varchar(45),   
        Age int,   
        City varchar(25)  
    );  

创建表后,如果要给该表添加主键,需要执行如下的 ALTER TABLE 语句:

mysql> ALTER TABLE Persons ADD PRIMARY KEY(Person_ID);  

我们可以看到两个语句都成功执行的输出。

如果表需要将主键添加到已经有数据到列的表中,那么必须确保该列不包含重复值或空值。

五、删除主键

ALTER TABLE 语句还允许我们从表中删除主键。以下语法用于删除主键:

ALTER TABLE table_name  DROP PRIMARY KEY;  

示例

mysql> ALTER TABLE Login DROP PRIMARY KEY;  

六、主键 和 唯一键 区别

下面的比较图表解释了它们之间的一些常见差异:

Primary Key主键 Unique Key唯一键
它是单个字段或字段的组合,用于唯一标识表中的每条记录。 它还在没有主键的情况下唯一地确定表的每一行。
它不允许将 NULL 值存储到主键列中。 它只能在唯一键列中接受一个 NULL 值。
一张表只能有一个主键。 一个表可以有多个唯一键。
它创建一个聚集索引。 它创建一个非聚集索引。

热门文章

优秀文章