【问题标题】:MySql - how can you create a unique constraint on a combination of two values in two columnsMySql - 如何对两列中的两个值的组合创建唯一约束
【发布时间】:2014-11-25 14:38:50
【问题描述】:

我在创建该问题的答案中描述的索引时遇到问题:sql unique constraint on a 2 columns combination

我正在使用MySql,我收到语法错误,我的这个查询的版本如下:

CREATE UNIQUE INDEX ON friends (LEAST(userID, friendID), GREATEST(userID, friendID));

MySql 中提供了 LEAST 和 GREATEST 函数,但可能语法应该不同? 我尝试制作一个 ALTER TABLE 版本,但效果不佳。

【问题讨论】:

  • 为什么最小和最大?放置一个唯一的用户 ID、朋友 ID,然后在两列上放置一个外键,说明它们引用的是哪个表/字段。
  • 你不能那样做,期间。索引在字段上,而不是派生值。

标签: php mysql unique-index


【解决方案1】:

在 MySQL 中,不能使用函数作为索引的值。

文档没有明确说明这一点,但是,索引的基本特征是只支持“固定”数据:

索引用于快速查找具有特定列值的行。如果没有索引,MySQL 必须从第一行开始,然后通读整个表以查找相关行。

一般来说,这个“固定”数据是一个单独的列/字段;使用字符串字段(例如varchartext),您可以有一个前缀索引,而不是整个列。查看CREATE INDEX 了解更多信息。

您尝试在示例中创建的唯一索引将永远只有一条记录;这并不是一个真正有益的索引,因为它无助于搜索整个表。但是,如果您在userID, friendID 上为您的表建立索引,则在SELECT 语句中使用LEAST()GREATEST() 函数将由于索引本身而得到优化,因此在这种情况下它可能就是您所追求的。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 2013-03-25
  • 2017-04-23
  • 1970-01-01
相关资源
最近更新 更多