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`)