sql >> Database >  >> RDS >> Mysql

Gebruik meerdere kolommen als unieke identifier voor mysql

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


  1. Hoe u het aantal dagen in een maand in MySQL kunt krijgen

  2. ssh eerst met mysqldb in python

  3. Waar slaat PostgreSQL configuratie-/conf-bestanden op?

  4. ALTER &DROP-tabel DDL met onmiddellijk uitvoeren in Oracle-database