携手创作,共同成长!这是我参与「掘金日新计划 · 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的主键,这里发现删除主键约束时不需要指定主键名,需要特别说明:
删除主键约束,不需要指定主键名,因为一个表只有一个主键约束,删除主键约束后,非空还存在。