Ja, MySQL biedt de mogelijkheid om dit te doen.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
Ik weet niet waarvoor je deze tabel gebruikt, maar het klinkt alsof deze unieke sleutel een sterke kandidaat is voor de primaire sleutel van de tabel. Een primaire sleutel is automatisch ook een unieke sleutel. Als je besluit om het de primaire sleutel te maken, doe dan het volgende:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(Als je een foutmelding krijgt dat er al een primaire sleutel is, geef dan ALTER TABLE MyTable DROP PRIMARY KEY
uit en herhaal dan het bovenstaande commando.)
Bewerken: Als reactie op gebruikerscommentaar
U kunt niet meerdere rijen hebben met identieke niet-NULL
waarden voor de kolommen die onder de unieke sleutel vallen. U kunt dus geen twee rijen hebben waar group_id = 0 AND user_id = 5
, bijvoorbeeld. 0 is een waarde. Maar als u een of beide kolommen nullable maakt, kunt u kunt meerdere rijen hebben die identiek zijn tot plaatsing van NULL
s. U kunt dus twee (of meer) rijen hebben waar group_id IS NULL AND user_id = 1234
.
Voorbehoud:het bovenstaande geldt voor beide veelgebruikte MySQL-opslagengines (MyISAM en InnoDB). MySQL heeft opslag-engines waarin NULL
wordt beschouwd als een unieke waarde, maar u gebruikt ze waarschijnlijk niet.
Als u een of beide kolommen nullable maakt, kan uw unieke sleutel niet de primaire sleutel zijn - een primaire sleutel moet op kolommen staan die NOT NULL
zijn .
Stel dat u van deze sleutel uw primaire sleutel heeft gemaakt en dat u nu NULL
. wilt toestaan in de group_id
kolom. Ik weet niet welk datatype group_id
is op dit moment; Ik neem aan dat het momenteel INT UNSIGNED NOT NULL
, maar u zult het onderstaande moeten wijzigen als dit niet dit is. U kunt deze sleutel dan niet meer als uw primaire sleutel gebruiken. Hier is een commando dat u zou kunnen uitvoeren om de gewenste wijzigingen aan te brengen:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)