MySQL 主键是字段的单个或组合,用于唯一标识表中的每条记录。如果该列包含主键约束,则它不能为null 或 empty。一张表可能有重复的列,但它只能包含一个主键。它总是在列中包含唯一值。
在表中插入新行时,主键列还可以使用AUTO_INCREMENT属性自动为该行生成序列号。MySQL在表中定义主键后,会自动创建一个名为“ Primary ”的索引。由于它有一个关联的索引,我们可以说主键使查询性能快速。
主键规则
以下是主键的规则:
- 主键列值必须是唯一的。
- 每个表只能包含一个主键。
- 主键列不能为 null 或为空。
- MySQL 不允许我们使用现有的主键插入新行。
- 建议主键列使用 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');
输出
在下面的输出中,我们可以看到第一个插入查询成功执行。而第二个插入语句失败并给出错误提示:主键列的条目重复。
如果要在多个列上定义主键,请使用如下查询:
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;
主键与唯一键
下面的对比图解释了两者之间的一些共同差异:
SN | Primary Key | Unique Key |
---|---|---|
1. | 它是字段的单个或组合,用于唯一标识表中的每条记录。 | 在没有主键的情况下,它还唯一地确定表的每一行。 |
2. | 它不允许将 NULL 值存储到主键列中。 | 它只能接受一个 NULL 值进入唯一键列。 |
3. | 一张表只能有一个主键。 | 一张表可以有多个唯一键。 |
4. | 它创建一个聚集索引。 | 它创建一个非聚集索引。 |