携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
前言
上篇我们学习了MySQL中的非空约束。有兴趣的小伙伴可以阅读(# MySQL学习-非空约束)。
下面学习MySQL中的唯一约束。
唯一约束
作用
唯一约束,用来限制某个字段/某列的值不能重复。
关键字
UNIQUE
特点
- 同一个表可以有多个唯一约束。
- 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。
- 唯一性约束允许列值为空。
- 在创建唯一约束的时候,如果不给唯一约束命名,就默认与列名相同。
- MySQL会给唯一约束的列上默认创建一个唯一索引。
增加唯一约束
有两种方法增加唯一约束,一种在创建表时,一种在创建表后更改。
创建表时
创建表指定唯一约束。
CREATE TABLE 表名(
字段名 数据类型,
字段名 数据类型 UNIQUE,
字段名 数据类型 UNIQUE KEY
);
CREATE TABLE 表名(
字段名 数据类型,
字段名 数据类型,
CONSTRAINT 约束名 UNIQUE KEY(字段名)
);
举例一
创建两张表emp(id唯一,name唯一),dpt(id与name组合唯一)。
CREATE TABLE emp(
id INT UNIQUE,
name VARCHAR(30) UNIQUE KEY
);
CREATE TABLE dpt(
id INT,
name VARCHAR(30),
CONSTRAINT uk_id_name UNIQUE(id, name)
);
向emp表插入2条数据,向dpt表插入3条语句。
INSERT INTO emp
VALUES(1, 'xiaoming');
INSERT INTO emp
VALUES(2, 'xiaoming');
INSERT INTO emp
VALUES(1, '财务');
INSERT INTO emp
VALUES(2, '财务');
INSERT INTO emp
VALUES(1, '财务');
分别执行上面的5条语句。发现第1,3,4条语句成功,第2,5条语句报错。第2条数据插入数据失败的原因是,插入了name相同的数据。第5条数据插入失败的原因是,插入了id与name组合起来相同的数据。第4条数据能插入成功,虽然name相同,但这里设置的唯一约束是id与name组合项,单个字段重复数据,可以插入。这也是复合唯一约束。
创建表后
创建表后指定唯一约束。这里也是使用ALTER的方式。
方式一:
ALTER TABLE 表名 ADD UNIQUE KEY(字段名);
方式二:
ALTER TABLE 表名 MODIFY 字段名 字段类型 UNIQUE;
举例二
ALTER TABLE emp ADD UNIQUE KEY(id);
ALTER TABLE emp MODIFY name VARCHAR(30) UNIQUE;
复合唯一约束
上面的两种方式,都可以创建复合唯一约束,在创建表时已举例,这里不再赘述。
删除唯一约束
- 添加唯一性约束的列上也会自动创建唯一索引。
- 删除唯一约束只能通过删除唯一索引的方式删除。
- 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样。
- 如果创建唯一约束时未指定名称,如果是单列,就默认和列名相同。如果是组合列,那么默认和组合中排在第一个的列名相同。也可以自定义唯一约束名。
ALTER TABLE emp
DROP INDEX name;
运行即可删除唯一约束name。
今天先学习到这里,明天继续。