Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utiliser plusieurs colonnes comme identifiant unique pour mysql

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 pourquoi vous utilisez cette table, 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 d'en faire la clé primaire, procédez comme suit :

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

(Si vous recevez un message d'erreur indiquant qu'il existe déjà une clé primaire, émettez ALTER TABLE MyTable DROP PRIMARY KEY puis répétez la commande ci-dessus.)

Modifier : En réponse au commentaire de l'utilisateur

Vous ne pouvez pas avoir plusieurs lignes avec le même non-NULL 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 une ou les deux colonnes nullables, vous pouvez avoir plusieurs lignes identiques jusqu'au positionnement de NULL s. Vous pouvez donc avoir deux lignes (ou plus) où group_id IS NULL AND user_id = 1234 .

Condition :ce qui précède est vrai pour les deux moteurs de stockage MySQL couramment 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 rendez une ou les deux colonnes nullables, votre clé unique ne peut pas être la clé primaire - une clé primaire doit être sur des colonnes qui sont NOT NULL .

Supposons que vous ayez fait de cette clé votre clé primaire et que vous souhaitiez maintenant autoriser NULL dans le group_id colonne. Je ne sais pas quel type de données group_id est en ce moment ; Je suppose que c'est actuellement INT UNSIGNED NOT NULL , mais vous devrez modifier ce qui suit si ce n'est pas cela. Vous ne pourrez plus utiliser cette clé comme clé primaire. Voici une commande que vous pouvez exécuter pour apporter 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`)