java 创建唯一性约束_唯一约束 UNIQUE KEY

什么是唯一约束

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值时,可以有重复的,而其他的则不能插入重复值。

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

5a820626-482d-4c2c-94aa-6f77c4ff9e21.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值