【问题标题】:Is there a way to make an entire MySQL row unique有没有办法让整个 MySQL 行独一无二
【发布时间】:2011-10-09 08:29:31
【问题描述】:

我在 MySQL 中有一个包含 30 列和数千个条目的表。
有没有办法让每一行都独一无二,这意味着如果一行已经存在,我应该不能再次输入该行。

我不能在这里使用主键或唯一键,因为每个列都可能单独重复。
我希望该行是唯一的。 例如:- 有一张桌子有

columns->name,age,height,weight.

在此列中,我不能使任何一列或两列唯一,但我不应该有两个包含所有相同数据的条目。

【问题讨论】:

  • 请记住 ERROR 1071 合并这么多列会产生问题。

标签: mysql unique


【解决方案1】:

您需要一个复合主键。

复合主键告诉 MySQL 您希望主键是字段的组合。

更多信息在这里: Why use multiple columns as primary keys (composite primary key)

【讨论】:

  • OP 说她不能为此目的使用主键
  • @Raj More:从问题看来,OP 认为 PK 或 UK 一次只能应用于单个列,所以我认为这是一个有效的答案。
【解决方案2】:

您可以在多个列上创建唯一索引。只需将所有列放入索引中。如果列很大,您可能会遇到索引最大长度的问题,但请先尝试并查看。

【讨论】:

    【解决方案3】:

    您可以创建一个包含表中所有列的唯一索引

    ALTER TABLE buyers ADD UNIQUE idx_row_unique(first_name,last_name,...);
    

    这样,您可以保留唯一的 AUTO INCREMENT 主键以用于连接,同时仍确保表中的所有数据都是唯一的。

    【讨论】:

    • 这样做的问题是索引有最大长度,而且很长的索引效率低下。
    【解决方案4】:

    您可以在所有列上创建UNIQUE key,而不是在每列上创建单独的唯一键。这意味着值的组合将是唯一的 - 正是您所需要的。但请注意,如果任何一列允许空值,如果该列包含null 值,它将被计为唯一,即使另一行包含相同的值,null 为相同的值。

    【讨论】:

      【解决方案5】:

      您可以散列数据并将散列值设置为您的 PK,这将确保行是唯一的。

      【讨论】:

        猜你喜欢
        • 2011-02-27
        • 1970-01-01
        • 2020-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-29
        • 2014-04-22
        相关资源
        最近更新 更多