MySql — как вы можете создать уникальное ограничение для комбинации двух значений в двух столбцах

У меня проблема с созданием индекса, описанного в ответе на этот вопрос: sql уникальное ограничение для комбинации из 2 столбцов

Я использую MySql, и я получил синтаксическую ошибку, моя версия этого запроса выглядит следующим образом:

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

LEAST и GREATEST функции доступны в MySql, но, возможно, синтаксис должен быть другим?
Я пытался сделать версию ALTER TABLE, но она не сработала.

0

Решение

В MySQL вы не можете использовать функции в качестве значений для индексов.

В документации явно не говорится об этом, однако это базовая характеристика индекса, поддерживающая только «фиксированные» данные:

Индексы используются для быстрого поиска строк с конкретными значениями столбцов. Без индекса MySQL должен начинаться с первой строки, а затем читать всю таблицу, чтобы найти соответствующие строки.

Как правило, эти «фиксированные» данные представляют собой отдельный столбец / поле; со строковыми полями (такими как varchar или же text) у вас может быть префикс-индекс, а не весь столбец. Проверять, выписываться CREATE INDEX для получения дополнительной информации об этом.

Уникальный индекс, который вы пытаетесь создать в своем примере, будет иметь одну запись; это не очень полезный индекс, так как он не помогает для поиска по всей таблице. Однако, если вы индексируете свою таблицу на userID, friendID, с использованием LEAST() а также GREATEST() функции в SELECT Оператор будет оптимизирован благодаря самому индексу, поэтому в данном случае это может быть то, что вам нужно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]