“unique约束”的含义

说白了,UNIQUE约束就是数据库中的“去重器”,它保证你指定的列值不能有重复。
这个问题因许多细节而变得复杂。
我们先来说说最重要的事情。
它不会强制该列的值为空。
去年我们运行一个电子商务系统时,UNIQUE被添加到用户名字段中,但NOTNULL却没有。
这样一来,昵称空的用户也能注册,直接影响数据的一致性。
用行话来说,这称为雪崩效应。
事实上,前线的一点延迟让一切都恢复了。
还有一点是多个UNIQUE约束可以同时存在。
例如,我们对订单表的订单号和付款参考号都添加了限制。
当到3 000左右的时候,没有检测到冲突,但是后来我们发现有错误,因为这两个块是自我强制的。
还有另一个重要的细节。
数据库默认为你创建一个唯一索引,但是这个索引是b树还是哈希树取决于数据库。
例如PostgreSQL默认使用B树,查询效率较差,但插入速度快。
说实话,这很令人困惑。
很多人不注意UNIQUE和NOTNULL的组合,直接导致与空值的冲突。
等等,还有别的事。
虽然UNIQUE约束可以保证数据的唯一性,但是如果继续输入重复的值,数据库就会报错(通常是2 3 5 05 错误码)。
这个应该在业务层理解。
我认为值得尝试,但记住要增加测试量,不要真正搞乱产品环境。

“unique约束”的含义

Postgres 通过唯一约束确保列值的唯一性,隐式创建唯一索引。
1 9 9 6 年的SQL9 2 标准规定UNIQUE约束必须与NOTNULL结合使用。
2 01 0年的Postgres实现允许空值不唯一,例如:UNIQUE(col1 , col2 )。
表中的多个唯一约束作用于不同的列,如:unique(col1 )、unique(col2 )。
不要使用空值来绕过UNIQUE。
例如:col1 =NULL,col2 =NULL就不会冲突。
实用提醒:独特的约束并不等于业务的独特性。
业务特殊性由触发器或应用程序层控制。