Ano, MySQL tuto možnost poskytuje.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
Nevím, k čemu tuto tabulku používáte, ale zdá se, že tento jedinečný klíč může být silným kandidátem na primární klíč tabulky. Primární klíč je automaticky také jedinečný klíč. Pokud se rozhodnete z něj udělat primární klíč, proveďte místo toho následující:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(Pokud se zobrazí chybová zpráva, že již existuje primární klíč, zadejte ALTER TABLE MyTable DROP PRIMARY KEY a poté opakujte výše uvedený příkaz.)
Upravit: V reakci na komentář uživatele
Nemůžete mít více řádků s identickými jinými než NULL hodnoty pro sloupce pokryté jedinečným klíčem. Nemůžete tedy mít dva řádky, kde group_id = 0 AND user_id = 5 , například. 0 je hodnota. Pokud však u jednoho nebo obou sloupců nastavíte hodnotu null, můžete mít více řádků, které jsou identické až do umístění NULL s. Můžete tedy mít dva (nebo více) řádky, kde group_id IS NULL AND user_id = 1234 .
Výhrada:Výše uvedené platí pro oba běžně používané úložiště MySQL (MyISAM a InnoDB). MySQL má úložné stroje, ve kterých je NULL je považováno za jedinečnou hodnotu, ale pravděpodobně je nepoužíváte.
Pokud u jednoho nebo obou sloupců nastavíte hodnotu Null, pak váš jedinečný klíč nemůže být primárním klíčem – primární klíč musí být ve sloupcích, které NOT NULL .
Předpokládejme, že jste z tohoto klíče udělali primární klíč a nyní chcete povolit NULL v group_id sloupec. Nevím, jaký datový typ group_id je v tuto chvíli; Předpokládám, že je aktuálně INT UNSIGNED NOT NULL , ale pokud to není toto, budete muset upravit níže uvedené. Tento klíč byste již nemohli používat jako primární klíč. Zde je příkaz, který můžete spustit, abyste provedli požadované změny:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)