2014-11-25 131 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