Ja, MySQL ger möjlighet att göra detta.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
Jag vet inte vad du använder den här tabellen till, men det låter som att den här unika nyckeln kan vara en stark kandidat för tabellens primärnyckel. En primärnyckel är automatiskt också en unik nyckel. Om du bestämmer dig för att göra den till primärnyckeln gör du följande istället:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(Om du får ett felmeddelande om att det redan finns en primärnyckel, utfärda ALTER TABLE MyTable DROP PRIMARY KEY
och upprepa sedan kommandot ovan.)
Redigera: Som svar på användarkommentar
Du kan inte ha flera rader med identisk icke-NULL
värden för de kolumner som täcks av den unika nyckeln. Så du kan inte ha två rader där group_id = 0 AND user_id = 5
, till exempel. 0 är ett värde. Men om du gör en eller båda kolumnerna nullbara, kan du har flera rader som är identiska upp till positionering av NULL
s. Så du kan ha två (eller fler) rader där group_id IS NULL AND user_id = 1234
.
Förbehåll:Ovanstående gäller för båda de vanligaste MySQL-lagringsmotorerna (MyISAM och InnoDB). MySQL har lagringsmotorer där NULL
betraktas som ett unikt värde, men du använder dem förmodligen inte.
Om du gör en eller båda kolumnerna nullbara, kan din unika nyckel inte vara primärnyckeln - en primärnyckel måste finnas på kolumner som är NOT NULL
.
Låt oss anta att du hade gjort den här nyckeln till din primära nyckel och att du nu vill tillåta NULL
i group_id
kolumn. Jag vet inte vilken datatyp group_id
är för tillfället; Jag antar att den för närvarande är INT UNSIGNED NOT NULL
, men du måste ändra nedan om det inte är detta. Du skulle inte längre kunna använda denna nyckel som din primära nyckel. Här är ett kommando du kan köra för att göra önskade ändringar:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)