MySQL学习-PRIMARY KEY约束

150 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

前言

上篇我们学习了MySQL中的唯一约束。有兴趣的小伙伴可以阅读(# MySQL学习-唯一约束)。
下面学习MySQL中的PRIMARY KEY约束。

PRIMARY KEY约束

作用

用来唯一标识表中的一行记录。

关键字

PRIMARY KEY

特点

  • 主键约束相当于唯一约束和非空约束的组合。主键约束列不允许重复,也不允许出现空值。
  • 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别创建。
  • 主键约束对应着表中的一列或多列(复合主键)。
  • 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  • MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。
  • 当创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引(能够根据主键查询的,就根据主键查询,效率更高)。如果删除了主键约束,主键约束对应的索引就会自动删除。
  • 需注意,不要修改主键子段的值。因为主键是数据记录的唯一标识,如果修改了主键的值,就有可能会破坏数据的完整性。

增加主键约束

增加主键约束,可以在创建表时,也可以在创建表后。

创建表时指定约束

CREATE TABLE 表名(
    字段名 数据类型 PRIMARY KEY,
);

CREATE TABLE 表名(
    字段名 数据类型,
    CONSTRAINT 约束名 PRIMARY KEY(字段名)
);

举例一

创建表emp,其中主键id。

CREATE TABLE emp(
    id INT PRIMARY KEY,
    name VARCHAR(30)
);

向表中插入3条数据。

INSERT INTO emp 
VALUES(1, 'xiaoming');

INSERT INTO emp 
VALUES(1, 'xiaohong');

INSERT INTO emp 
VALUES(NULL, 'xiaoqiang');

其中第一条语句可以插入成功,第二和第三条语句不能插入成功。是因为主键不能重复且不能为空。是唯一且不为NULL的。

创建表后增加主键约束

ALTER TABLE 表名
ADD PRIMARY KEY(字段名);

举例二

创建emp1表,修改emp1表中字段name为主键。

CREATE TABLE emp1(
    id INT,
    name VARCHAR(30)
);

ALTER TABLE emp1
ADD PRIMARY KEY(name);

删除主键约束

ALTER TABLE 表名
DROP PRIMARY KEY;

举例三

删除emp表中的主键。

ALTER TABLE emp
DROP PRIMARY KEY;

这样就可以删除emp的主键,这里发现删除主键约束时不需要指定主键名,需要特别说明:
删除主键约束,不需要指定主键名,因为一个表只有一个主键约束,删除主键约束后,非空还存在。