Oui, MySQL offre la possibilité de le faire.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
Je ne sais pas ce que vous utilisez ce tableau pour, mais il semble que cette clé unique pourrait être un bon candidat pour la clé primaire de la table. Une clé primaire est également automatiquement une clé unique. Si vous décidez de faire la clé primaire, puis procédez comme suit à la place:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(. Si vous recevez un message d'erreur qu'il existe déjà une clé primaire, émettre ensuite ALTER TABLE MyTable DROP PRIMARY KEY
puis répétez la commande ci-dessus)
Edit: en réponse aux commentaires de l'utilisateur
Vous ne pouvez pas avoir plusieurs lignes avec NULL
non identiques des valeurs pour les colonnes couvertes par la clé unique. Vous ne pouvez donc pas avoir deux lignes où group_id = 0 AND user_id = 5
, par exemple. 0 est une valeur. Mais si vous rendez l'une des colonnes ou les deux NULL, vous pouvez avoir plusieurs lignes qui sont identiques jusqu'au positionnement de NULL
s. Vous pouvez donc avoir deux (ou plusieurs) rangées où group_id IS NULL AND user_id = 1234
. Proviso: Ce qui précède est vrai pour les deux moteurs de stockage MySQL communément utilisés (MyISAM et InnoDB). MySQL a des moteurs de stockage dans lesquels NULL
est considéré comme une valeur unique, mais vous ne les utilisez probablement pas.
Si vous désactivez une ou les deux colonnes, votre clé unique ne peut pas être la clé primaire - une clé primaire doit être sur les colonnes NOT NULL
.
Supposons que vous ayez fait de cette clé votre clé primaire et que vous souhaitiez maintenant autoriser NULL
dans la colonne group_id
. Je ne sais pas quel est le type de données group_id
actuellement; Je suppose que c'est actuellement INT UNSIGNED NOT NULL
, mais vous devrez modifier le ci-dessous si ce n'est pas le cas. Vous ne pourrez plus utiliser cette clé comme clé primaire. Voici une commande que vous pouvez exécuter pour effectuer les modifications souhaitées:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)
Y a-t-il une raison pour laquelle group_id et user_id ne sont pas les clés primaires de cette table? – Gus
Ils sont définis en tant qu'index, mais le fait d'être défini sur primary fait-il une différence pour essayer d'accomplir la tâche? Si oui, je peux les rendre primaires. – user396404