MySQL 主键
MySQL主键是一个用于标识表中每条记录的单个或组合字段。 唯一地 。如果列包含主键约束,则不能为 null或空 。一个表可以有重复的列,但只能包含一个主键。它始终包含一个唯一值。
当您向表中插入新行时,主键列也可以使用 AUTO_INCREMENT 属性为该行自动生成连续的编号。 MySQL 在为表定义主键后自动创建一个名为“ Primary ”的索引。由于它有一个关联的索引,我们可以说主键使查询性能快。
主键规则
主键的规则如下:
- 主键列的值必须是唯一的。
- 每个表只能包含一个主键。
- 主键列不能为null或空。
- MySQL不允许我们使用现有的主键插入新行。
- 建议为主键列使用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, 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;
主键 vs. 唯一键
以下比较图表解释了它们之间的一些常见区别:
序号 | 主键 | 唯一键 |
---|---|---|
1. | 它是一个字段或字段的组合,用于唯一标识表中的每条记录。 | 在没有主键的情况下,它也可以唯一地确定表中的每一行。 |
2. | 它不允许将NULL值存储到主键列中。 | 它只能接受一个NULL值到唯一键列中。 |
3. | 一个表只能有一个主键。 | 一个表可以有多个唯一键。 |
4. | 它创建一个聚集索引。 | 它创建一个非聚集索引。 |