Да, 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
с. Така че бихте могли да имате два (или повече) реда, където group_id IS NULL AND user_id = 1234
.
Условие:Горното е вярно и за двете често използвани 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`)