2014-11-25 128 views
0

我有创造的回答这个问题,说明指数的问题上创建两个值的组合,唯一约束:sql unique constraint on a 2 columns combinationMySQL的 - 你怎么能在两列

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

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

最少,最伟大的功能在MySQL是可用的,但也许语法应该是不同的? 我试图做一个ALTER TABLE版本,但它不工作。

+0

为什么最小和最大?放置一个唯一的用户ID,friendID,然后在两列上放置一个外键,说明它们引用了哪个表/字段。 – 2014-11-25 14:43:03

+1

你不能这样做,期间。索引是在字段上,而不是派生值。 – 2014-11-25 14:46:55

回答

0

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

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

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

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

您尝试在您创建的唯一索引示例中将有一条记录;这并不是一个有益的索引,因为它无助于搜索整个表格。但是,如果您使用userID, friendID索引您的表,那么使用LEAST()GREATEST()将会优化SELECT语句中的函数,这要归功于索引本身,因此可能是您在这种情况下的结果。

+0

好的,那么还有另一种解决方案,它可以在MySQL中创建约束条件,详见http://stackoverflow.com/questions/10159411/sql-unique-constraint-on-a-2-columns-combination? – Busiek 2014-11-26 09:24:41