📜  MySQL主键

📅  最后修改于: 2020-11-18 03:24:52             🧑  作者: Mango

MySQL主键

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

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

主键规则

以下是主键的规则:

  • 主键列值必须是唯一的。
  • 每个表只能包含一个主键。
  • 主键列不能为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))
);

参数说明

下表详细说明了参数。

Parameter Name Descriptions
Table_name It is the name of the table that we are going to create.
Col1, col2 It is the column names that contain in the table.
Constraint_name It is the name of the primary key.
Column_name(s) It is the column name(s) that is going to be a 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');

输出量

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

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

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);

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

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

DROP主键

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

ALTER TABLE table_name  DROP PRIMARY KEY;

mysql> ALTER TABLE Login DROP PRIMARY KEY;

主键与唯一键

下面的比较表解释了两者之间的一些共同点:

SN Primary Key Unique Key
1. It is a single or combination of the field, which is used to identify each record in a table uniquely. It also determines each row of the table uniquely in the absence of a primary key.
2. It does not allow to store a NULL value into the primary key column. It can accept only one NULL value into the unique key column.
3. A table can have only one primary key. A table can have more than one unique key.
4. It creates a clustered index. It creates a non-clustered index.