迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > PostgreSQL >

在 PostgreSQL 中创建表后添加唯一约束

作者:迹忆客 最近更新:2023/03/20 浏览次数:

今天,我们将学习如何在表中的行已经创建后添加 UNIQUE 约束。

UNIQUE 约束保证一行中的数据在该列中是唯一的。因此,如果存在列 ID,则所有行都将具有唯一值,而不是重复值。

但是,即使有约束,也可能出现两行以上的空值。

但是如果我们忘记在我们想要的列中添加 UNIQUE 怎么办?今天,我们将看看如何在创建表后向所需列添加唯一约束。

在 PostgreSQL 中创建表后使用 alter 语句添加唯一约束

alter 语句支持包含 UNIQUE。在我们的示例中,我们将使用一个名为 Dog 的已经制作好的表格。

已经做好的表 - dog

这个表有一个 tag 作为主键和一个 owner_idowner_id 未设置为 UNIQUE,因为如果我们插入以下内容,它将完美地工作。

insert into dog values (14, 2);

输出:

dog 表更新

但是现在,让我们将 UNIQUE 约束添加到列 owner_id,看看当我们调用 insert 时会发生什么。

alter table dog add constraint uniq_test UNIQUE (owner_id);

现在,当我们为数据中的重复 owner_id 调用 insert 时; (14, 2),这是 PostgreSQL 将返回的错误。

ERROR:  duplicate key value violates unique constraint "uniq_test"
DETAIL:  Key (owner_id)=(2) already exists.

我们定义为 uniq_testUNIQUE 约束被违反了。

但是如果我们已经在表中有重复的值并添加了 UNIQUE 约束怎么办?在这种情况下,ALTER 将失败并出现以下错误:

ERROR:  could not create unique index "uniq_test"
DETAIL:  Key (owner_id)=(2) is duplicated.

约束添加失败,因为已经存在重复的键。那么我们如何解决这个问题呢?

如果你已经有一个大表并且无法删除重复值,则无法添加约束,即使你使用较旧的查询,例如以下查询:

create unique index uniq_test on dog (owner_id);

它将返回一个 DUPLICATE 错误。

PostgreSQL 这样做是因为如果你将 UNIQUE 添加到列中,这意味着所有值都必须是唯一的。

如果你已经有重复的值,则不能期望该列是唯一的;因此,这是被舍弃的。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 PSQL 中运行 SQL 文件

发布时间:2023/03/20 浏览次数:178 分类:数据库

本文解释了如何直接从终端/命令行或 psql shell 运行 SQL 文件。为此,你需要指定主机名、端口、用户名和数据库名称。

在 PostgreSQL 中使用循环

发布时间:2023/03/20 浏览次数:124 分类:PostgreSQL

在 PL/SQL 中,你可能需要在 Postgres 中使用循环。我们可以使用 FOR 和 WHILE 语句来创建循环。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便