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