在 PostgreSQL 中创建表后添加唯一约束
今天,我们将学习如何在表中的行已经创建后添加 UNIQUE
约束。
UNIQUE 约束保证一行中的数据在该列中是唯一的。因此,如果存在列 ID,则所有行都将具有唯一值,而不是重复值。
但是,即使有约束,也可能出现两行以上的空值。
但是如果我们忘记在我们想要的列中添加 UNIQUE
怎么办?今天,我们将看看如何在创建表后向所需列添加唯一约束。
在 PostgreSQL 中创建表后使用 alter
语句添加唯一约束
alter
语句支持包含 UNIQUE
。在我们的示例中,我们将使用一个名为 Dog
的已经制作好的表格。
这个表有一个 tag
作为主键和一个 owner_id
。owner_id
未设置为 UNIQUE
,因为如果我们插入以下内容,它将完美地工作。
insert into dog values (14, 2);
输出:
但是现在,让我们将 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_test
的 UNIQUE
约束被违反了。
但是如果我们已经在表中有重复的值并添加了 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
添加到列中,这意味着所有值都必须是唯一的。
如果你已经有重复的值,则不能期望该列是唯一的;因此,这是被舍弃的。
相关文章
在一个 PostgreSQL 查询中使用多个 WITH 语句
发布时间:2023/03/20 浏览次数:127 分类:PostgreSQL
-
在本教程中,我们将学习如何使用多个 WITH 语句在 PostgreSQL 中使用两个临时表执行查询。
在 Ubuntu 上的 PostgreSQL 中找到配置文件
发布时间:2023/03/20 浏览次数:130 分类:PostgreSQL
-
本文介绍如何在 Ubuntu 上找到 PostgreSQL 数据库的配置文件。
在 PSQL 中运行 SQL 文件
发布时间:2023/03/20 浏览次数:178 分类:数据库
-
本文解释了如何直接从终端/命令行或 psql shell 运行 SQL 文件。为此,你需要指定主机名、端口、用户名和数据库名称。
在 PostgreSQL 中使用循环
发布时间:2023/03/20 浏览次数:124 分类:PostgreSQL
-
在 PL/SQL 中,你可能需要在 Postgres 中使用循环。我们可以使用 FOR 和 WHILE 语句来创建循环。
在 PostgreSQL 中重命名和更改列类型的单个查询
发布时间:2023/03/20 浏览次数:121 分类:PostgreSQL
-
本文介绍如何在 PostgreSQL 中仅使用单个查询来重命名列以及更改其类型。
在 PostgreSQL 中使用 Select 连接列
发布时间:2023/03/20 浏览次数:202 分类:PostgreSQL
-
本文介绍如何在 PostgreSQL 中使用 Select 方法连接列。