如何使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 NULL 和 Unique 约束的组合。
我知道我们可以将主键应用于列以提供行的唯一性,并且我们可以应用多个主键并获得一个组合键。
但这对我的情况不起作用。我有 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 NULL 和 Unique 约束的组合。