sql >> Databasteknik >  >> RDS >> Mysql

Använd flera kolumner som unik identifierare för mysql

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


  1. Fel vid användning förutom i en fråga

  2. SQL "OCH" eller "ELLER" kommer först?

  3. flerbildsuppladdning fel kvantitet vid filuppladdning

  4. SQL-fråga för att ta bort databas i MySQL