【问题标题】: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 NULLUnique 约束的组合。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-19
        • 2010-10-02
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        • 2023-02-04
        • 2010-09-13
        • 2014-09-08
        相关资源
        最近更新 更多