让某列的值唯一,空值除外

后端开发 2026-07-09

我有一个使用Spring Boot的项目,已与PostgreSQL数据库集成。 我需要某一列的值唯一,非空时才要求唯一,允许有多个NULL值。 这是否可行?如何使用Liquibase的 YAML语法实现?

- column:
    name: label
    type: varchar(150)
    constraints:
        unique: true if not null

解决方案

默认情况下,PostgreSQL在唯一约束下允许出现多个NULL值。请参阅这里的文档:docs

通常来说,如果在表中存在多于一行的情况,使得被约束包含的所有列的值都相同,那么唯一约束会被违反。默认情况下,两个NULL值在此比较中不被视为相等。这意味着即使存在唯一约束,也有可能存储包含至少一个被约束列为NULL的重复行。

这符合SQL标准,其中任何NULL都不等于任何其他NULL。

因此,在创建唯一约束时,不需要额外指定任何内容。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章