sql >> Database teknologi >  >> RDS >> Mysql

Brug flere kolonner som unikt id for mysql

Ja, MySQL giver mulighed for at gøre dette.

ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)

Jeg ved ikke, hvad du bruger denne tabel til, men det lyder som om, at denne unikke nøgle kan være en stærk kandidat til tabellens primære nøgle. En primær nøgle er automatisk også en unik nøgle. Hvis du beslutter dig for at gøre det til den primære nøgle, så gør følgende i stedet:

ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)

(Hvis du modtager en fejlmeddelelse om, at der allerede er en primær nøgle, skal du udstede ALTER TABLE MyTable DROP PRIMARY KEY og gentag derefter kommandoen ovenfor.)

Rediger: Som svar på brugerkommentar

Du kan ikke have flere rækker med identiske ikke-NULL værdier for de kolonner, der er dækket af den unikke nøgle. Så du kan ikke have to rækker, hvor group_id = 0 AND user_id = 5 , for eksempel. 0 er en værdi. Men hvis du gør en eller begge af kolonnerne nullable, kan du har flere rækker, der er identiske op til placering af NULL s. Så du kunne have to (eller flere) rækker, hvor group_id IS NULL AND user_id = 1234 .

Forbehold:Ovenstående gælder for begge almindeligt anvendte MySQL-lagringsmotorer (MyISAM og InnoDB). MySQL har lagermotorer, hvori NULL betragtes som en unik værdi, men du bruger dem sandsynligvis ikke.

Hvis du gør en eller begge kolonner nulbare, så kan din unikke nøgle ikke være den primære nøgle - en primær nøgle skal være på kolonner, der er NOT NULL .

Lad os antage, at du havde gjort denne nøgle til din primære nøgle, og du vil nu tillade NULL i group_id kolonne. Jeg ved ikke hvilken datatype group_id er i øjeblikket; Jeg antager, at den i øjeblikket er INT UNSIGNED NOT NULL , men du bliver nødt til at ændre nedenstående, hvis det ikke er dette. Du ville ikke længere være i stand til at bruge denne nøgle som din primære nøgle. Her er en kommando, du kan køre for at foretage de ønskede ændringer:

ALTER TABLE MyTable
    DROP PRIMARY KEY,
    MODIFY group_id INT UNSIGNED,
    ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)


  1. Find alle ikke-numeriske værdier i en kolonne i Oracle

  2. WHERE-sætning ved hjælp af værdier, der kunne være NULL

  3. mysql, transponer/pivot række til kolonne, variabelvalg

  4. Sådan beskytter du en JDBC-applikation mod SQL-injektion