> 文档中心 > 【MySQL入门】七大约束——4.唯一约束(UNIQUE KEY)

【MySQL入门】七大约束——4.唯一约束(UNIQUE KEY)

文章目录

    • 唯一约束(UNIQUE KEY)
      • 1.在创建表时设置唯一约束
      • 2.在修改表时添加唯一约束
      • 3.删除唯一约束

✅作者简介:正在学习java全栈,有兴趣的可以关注我一起学习
📃个人主页:ConderX(摸鱼)的主页
🔥系列专栏:MySQL专栏
💖如果觉得博主的文章还不错的话,请👍三连支持一下博主哦🤞

唯一约束(UNIQUE KEY)

唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘1’,那么该表中就不能出现另一条记录的 id 值也为‘1’。

唯一约束与主键约束的异同:

  • 相同点:都可以确保列的唯一性
  • 不同点:
    • 唯一约束:在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。
    • 主键约束:主键约束在一个表中只能有一个,且不允许有空值。

1.在创建表时设置唯一约束

唯一约束可以在创建表时直接设置,通常设置在除了主键以外的其它列上。

在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法格式如下:

  UNIQUE

示例1:创建数据表tb_dept2,指定部门名称唯一,SQL语句和运行结果如下所示:

mysql> CREATE TABLE tb_dept2(    -> id INT(11) PRIMARY KEY,    -> name VARCHAR(22) UNIQUE,    -> location VARCHAR(50));Query OK, 0 rows affected (0.02 sec)mysql> DESC tb_dept2;+----------+-------------+------+-----+---------+-------+| Field    | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| id| int(11)     | NO   | PRI | NULL    ||| name     | varchar(22) | YES  | UNI | NULL    ||| location | varchar(50) | YES  |     | NULL    ||+----------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)

2.在修改表时添加唯一约束

在修改表时添加唯一约束的语法格式为:

ALTER TABLE  ADD CONSTRAINT  UNIQUE();

示例2:修改数据表tb_dept,指定部门名称唯一,SQL语句和运行结果如下:

mysql> ALTER TABLE tb_dept ADD CONSTRAINT unique_name UNIQUE(name);Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> DESC tb_dept;+----------+-------------+------+-----+---------+-------+| Field    | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| id| int(11)     | NO   | PRI | NULL    ||| name     | varchar(22) | NO   | UNI | NULL    ||| location | varchar(50) | YES  |     | NULL    ||+----------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)

3.删除唯一约束

在 MySQL 中删除唯一约束的语法格式如下:

ALTER TABLE  DROP INDEX ;

示例3:删除数据表tb_dept中的唯一约束unique_name ,SQL 语句和运行结果如下所示。

mysql> ALTER TABLE tb_dept DROP INDEX unique_name;Query OK, 0 rows affected (0.01 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> DESC tb_dept;+----------+-------------+------+-----+---------+-------+| Field    | Type | Null | Key | Default | Extra |+----------+-------------+------+-----+---------+-------+| id| int(11)     | NO   | PRI | NULL    ||| name     | varchar(22) | NO   |     | NULL    ||| location | varchar(50) | YES  |     | NULL    ||+----------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)