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

How to make separately unique each column in postgresql?

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

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

我正在使用带有 python 的 psycopg2 模块,如果有相同的电子邮件,我可以在用户注册时通过搜索行来实现这种唯一性,并要求用户更改电子邮件以获得唯一性。但我想知道有没有办法用 postgresql/sql.

做这种单独的唯一性

提前致谢...

不用做id!只需将其设为唯一约束即可。 例如像这样:

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

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

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

在主键的情况下,您不能保留空值,但如果使用唯一键,您可以拥有空值,只要它不跨行重复即可。主键是 NOT NULLUnique 约束的组合。