【问题标题】:How to make separately unique each column in postgresql?如何使postgresql中的每一列分别唯一?
【发布时间】:2020-03-26 07:24:21
【问题描述】:
我知道我们可以将主键应用于列以提供行的唯一性,并且我们可以应用多个主键并获得复合键。
但这不适用于我的情况。我有用户 ID 和电子邮件列。我希望它们同时是独一无二的。当我将主键属性应用于他们两个时,可以将具有相同电子邮件但不同用户 ID 的人添加到表中。所以复合键就像我想的组合,当用户 ID 更改时,无需更改电子邮件。
我在 python 中使用 psycopg2 模块,我可以在用户注册时通过搜索行(如果有相同的电子邮件)来实现此唯一性,并要求用户更改电子邮件以获取唯一性。但我想知道有没有办法用 postgresql/sql 做这种单独的唯一性。
提前谢谢...
【问题讨论】:
标签:
python
sql
postgresql
primary-key
composite-primary-key
【解决方案1】:
无需将其设为 id!只需将其设为唯一约束即可。
比如这样:
CREATE TABLE orders(
id integer PRIMARY KEY,
email VARCHAR(255) UNIQUE
)
【解决方案2】:
您可以通过使用 Unique 约束来实现这一点。您可以按如下方式使用它:
CREATE TABLE person (
id serial PRIMARY KEY,
first_name VARCHAR (50),
last_name VARCHAR (50),
email VARCHAR (50) UNIQUE
);
在主键的情况下,您不能保留空值,但如果是唯一的,您可以拥有空值,只要它不跨行重复。主键是 NOT NULL 和 Unique 约束的组合。