MySQL主键是字段的单个或组合,用于唯一标识表中的每个记录。如果该列包含主键约束,则它不能为 null或为empty。一个表可能有重复的列,但只能包含一个主键。它始终将唯一值包含到列中。
在表中插入新行时,主键列还可以使用 AUTO_INCREMENT 属性自动为该行生成一个序列号。在表中定义主键后, MySQL 会自动创建一个名为" Primary"的索引。由于它具有关联的索引,因此可以说主键可以提高查询性能。
在本节中,无涯教程将了解如何使用 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_nme | 它是主键的名称。 |
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@learnfk.com'), (2, 'Joseph', 35435479495, 'Joseph@learnfk.com'); mysql> INSERT INTO Login(login_id, username, password, email) VALUES (1,'Peter', 15343434532, 'peter@learnfk.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 。
该语句使可以对现有表进行修改。当表没有主键时,此语句用于将主键添加到现有表的列中。
以下是在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 | 主键 | 唯一键 |
---|---|---|
1 | 它是字段的单个或组合,用于唯一标识表中的每个记录。 | 它还可以在没有主键的情况下唯一确定表的每一行。 |
2 | 不允许将NULL值存储到主键列中。 | 它只能在唯一键列中接受一个NULL值。 |
3 | 一个表只能有一个主键。 | 一个表可以有多个唯一键。 |
4 | 它将创建聚簇索引。 | 它将创建一个非聚集索引。 |
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)