【问题标题】:In MySQL, is it possible to have a UNIQUE constraint on a row?在 MySQL 中,是否可以对一行进行 UNIQUE 约束?
【发布时间】:2011-02-09 16:05:38
【问题描述】:

似乎 MySQL 的 UNIQUE 约束是逐列的,我正在寻找一种方法来确保该行在逐行的基础上是唯一的;猜测答案是通过连接每行的列来创建一个散列,然后我想是唯一的,但是在存储该行的散列的列上是唯一的。此外,除非我创建控件,否则行本身将始终是唯一的,因为行的 ID 是 SURROGATE_KEY;这意味着它是一个整数,按最后一行整数的 ID +1 递增。

【问题讨论】:

  • 如果有大量字段,性能会很差,但您可以添加一个包含所有字段的唯一键。但是,您必须排除 ID 字段,因为这会破坏您想要的唯一性。
  • 我不确定我是否理解这个问题——你想确保行是唯一的而不使用唯一的列吗?但是由于主键的存在,不是所有表的行都是唯一的吗?
  • @ryebr3ad:唯一的主键只有在键是自然的情况下才有效,如果不是,它是人工生成的顺序整数。

标签: mysql unique


【解决方案1】:

您可以创建多列UNIQUE 索引。

【讨论】:

  • 多列 UNIQUE 似乎就是这样,多列上的 UNIQUE,而不是列组合上的 UNIQUE。有错吗?
  • 错了?凭什么?如果您在 (col1,col2) 上创建唯一索引,那么它将确保在这两列中没有两行具有完全相同的值。
【解决方案2】:

确保行完全唯一的主要方法是在每一列上使用UNIQUE 约束或在每一列上创建一个类似的UNIQUE 索引。如果您可以允许两列接受相同的输入,但您需要唯一区分它们,那么除了主键(基本上是一个 ID 列)之外,您没有理由需要其他任何东西。您可以做的另一件事是切换到列存储数据库,例如具有 MySQL 前端的 InfiniDBMonetDB,两者都是开源替代方案。

【讨论】:

  • 主键是UNIQUE,也是人工生成的顺序整数。
猜你喜欢
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多