AI智能
改变未来

唯一约束 UNIQUE KEY

[TOC] (目录)

什么是唯一约束

Unique Key:它是

MySQL

中的唯一约束,是指在所有记录中字段的值不能重复出现。例如,为

id

字段加上唯一性约束后,每条记录的

id

值都是唯一的,不能出现重复的情况。如果其中一条记录的

id

值为

0001

,那么该表中就不能出现另一条记录的

id

值也为

0001

与主键的区别

Unique Key

Primary Key

都是

MySQL

中的唯一约束类型,但不同的是,

Unique Key

可以有多个字段,而且可以为空,但只能有一个为空,而主键约束则只允许有一个字段,且不能为空。

创建唯一约束

我们可以创建多字段唯一约束,例如:

CREATE TABLE `employee` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int DEFAULT NULL,`city` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `UNIQUE_KEY` (`name`,`city`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

id

是主键,

name

city

是一个组合

Unique_key

,现在插入一条数据:

INSERT INTO `employee` (`name`, `age`, `city`) VALUES (\'Tom\', \'10\', \'北京\');

数据结果:

id name age city
1 Tom 10 北京

唯一性验证

这时候,如果我们再次插入相同

name

city

的一条数据:

INSERT INTO `employee` (`name`, `age`, `city`) VALUES (\'Tom\', \'10\', \'北京\');

这时候出现了如下报错信息,存在重复键

Tom-北京

[SQL]INSERT INTO `employee` (`name`, `age`, `city`) VALUES (\'Tom\', \'10\', \'北京\');[Err] 1062 - Duplicate entry \'Tom-北京\' for key \'employee.UNIQUE_KEY\'

所以,唯一约束起了作用。

注意:

Unique_key

是允许字段为空的。因为

name

city

都没有非空限制,所以,我们可以将它们设置为

null

这里我们需要解释下,

Unique_key

唯一性

是说你不能插入相同的值,但如果你插入的字段其中有

null

,那么,即使你重复插入,唯一约束也不会起作用!

例如,我们连续执行以下SQL:

INSERT INTO `employee` (`name`, `age`, `city`) VALUES (\'Tom\', \'10\', NULL);INSERT INTO `employee` (`name`, `age`, `city`) VALUES (\'Tom\', \'10\', NULL);INSERT INTO `employee` (`name`, `age`, `city`) VALUES (\'Tom\', \'10\', NULL);

这时候是不会报错的,而且全都插入成功。

id name age city
1 Tom 10 NULL
2 Tom 10 NULL
3 Tom 10 NULL

原因:

主键和唯一键约束是通过参考索引实施的,如果插入的值均为

NULL

,则根据索引的原理,全

NULL

值不被记录在索引上,所以插入全

NULL

值时,可以有重复的,而其他的则不能插入重复值。

这里,我们在使用的时候需要特别注意下!

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 唯一约束 UNIQUE KEY