如何使postgresql中的各列分别唯一?

问题描述 投票:-1回答:2

我知道我们可以将主键应用于列以提供一行的唯一性,并且我们可以应用多个主键并获得一个复合键。

但是这不适用于我的情况。我有userID和email列。我希望它们同时具有独特性。当我对他们两个都应用主键属性时,可以将具有相同电子邮件但不同用户ID的人添加到表中。因此,复合键就像我想的一种组合,当userID更改时,无需更改电子邮件。

我正在将python的psycopg2模块与python一起使用,我可以在用户注册时通过搜索行是否存在相同的电子邮件来实现此唯一性,并要求用户更改电子邮件中的唯一性。但是我想学习是否有办法用postgresql / sql做这种单独的唯一性。

提前感谢...

python sql postgresql primary-key composite-primary-key
2个回答
1
投票

无需将其作为ID!只要使其成为唯一约束即可。例如这样:

CREATE TABLE orders(
id integer PRIMARY KEY,
email VARCHAR(255) UNIQUE
)

0
投票

您可以使用Unique约束来实现。您可以按以下方式使用它:

CREATE TABLE person (
   id serial PRIMARY KEY,
   first_name VARCHAR (50),
   last_name VARCHAR (50),
   email VARCHAR (50) UNIQUE
);

在使用主键的情况下,您不能保留null值,但是对于唯一键,只要不跨行重复就可以包含null。主键是NOT NULLUnique约束的组合。

© www.soinside.com 2019 - 2024. All rights reserved.