MySql - 如何在两列中的两个值的组合上创建唯一约束

时间:2014-11-25 14:38:51

标签: php mysql unique-index

我在回答此问题时遇到了创建索引的问题: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版本,但它没有用。

1 个答案:

答案 0 :(得分:0)

在MySQL中,您不能将函数用作索引的值。

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

  

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

通常,这个“固定”数据是一个单独的列/字段;使用字符串字段(例如varchartext),您可以拥有前缀索引而不是整个列。有关详细信息,请查看CREATE INDEX

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