MySQL学习-唯一约束

274 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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。

今天先学习到这里,明天继续。