程序员社区

MySQL系列教程 --- 81、MySQL 中的 主键(Primary Key)

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

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

主键规则

以下是主键的规则:

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

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

  • 创建表语句
  • 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, col2 它是包含在表中的列名。
Constraint_name 它是主键的名称。
Column_name(s) 列名将成为主键。

主键示例

下面的例子解释了如何在 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');  

输出

在下面的输出中,我们可以看到第一个插入查询成功执行。而第二个插入语句失败并给出错误提示:主键列的条目重复。

file

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

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_IDRoll_No

file

使用 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语句:

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

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

MySQL主键

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

删除主键

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

ALTER TABLE table_name  DROP PRIMARY KEY;  

例子

mysql> ALTER TABLE Login DROP PRIMARY KEY;  

主键与唯一键

下面的对比图解释了两者之间的一些共同差异:

SN Primary Key Unique Key
1. 它是字段的单个或组合,用于唯一标识表中的每条记录。 在没有主键的情况下,它还唯一地确定表的每一行。
2. 它不允许将 NULL 值存储到主键列中。 它只能接受一个 NULL 值进入唯一键列。
3. 一张表只能有一个主键。 一张表可以有多个唯一键。
4. 它创建一个聚集索引。 它创建一个非聚集索引。
赞(0) 打赏
未经允许不得转载:IDEA激活码 » MySQL系列教程 --- 81、MySQL 中的 主键(Primary Key)

一个分享Java & Python知识的社区