Ответ 1
Да, MySQL предоставляет возможность сделать это.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
Я не знаю, для чего вы используете эту таблицу, но похоже, что этот уникальный ключ может быть сильным кандидатом на первичный ключ таблицы. Первичный ключ также автоматически является уникальным ключом. Если вы решили сделать его первичным ключом, сделайте следующее:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(Если вы получили сообщение об ошибке, что уже есть первичный ключ, введите ALTER TABLE MyTable DROP PRIMARY KEY
и повторите вышеприведенную команду.)
Изменить: В ответ на комментарий пользователя
Вы не можете иметь несколько строк с одинаковыми значениями не NULL
для столбцов, охватываемых уникальным ключом. Таким образом, вы не можете иметь две строки, где group_id = 0 AND user_id = 5
, например. 0 - значение. Но если вы сделаете один или оба столбца нулевыми, вы можете иметь несколько строк, которые идентичны с позиционированием NULL
s. Таким образом, у вас могут быть две (или более) строки, где group_id IS NULL AND user_id = 1234
.
Proviso: Вышеупомянутое справедливо как для обычно используемых MySQL-систем хранения (MyISAM, так и для InnoDB). MySQL имеет механизмы хранения, в которых NULL
рассматривается как уникальное значение, но вы, вероятно, не используете их.
Если вы делаете один или оба столбца нулевыми, то ваш уникальный ключ не может быть первичным ключом - первичный ключ должен быть в столбцах NOT NULL
.
Предположим, что вы сделали этот ключ своим основным ключом, и теперь вы хотите разрешить NULL
в столбце group_id
. Я не знаю, какой тип данных group_id
на данный момент; Я предполагаю, что это сейчас INT UNSIGNED NOT NULL
, но вам придется изменить ниже, если это не так. Вы больше не сможете использовать этот ключ в качестве основного ключа. Вот команда, которую вы можете выполнить для внесения необходимых изменений:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)