/ / Est-il possible d'avoir un index unique mysql pour une valeur de colonne spécifique? - mysql, sql

Est-il possible d'avoir un index unique mysql pour une valeur de colonne spécifique? - mysql, sql

Désolé pour le titre bizarre, je ne pourrais pas l’écrire mieux ...

entrer la description de l'image ici

Regardez l'image ci-dessus.

Dans mysql, est-il possible / faisable d’avoir la colonne UNIQUE basée sur user_id?

Permettez-moi de reformuler ceci, est-il possible d'avoir des valeurs de colonne d'ordre uniques uniquement pour un utilisateur donné?

Donc, si pour user_id = 1 order = 1 et qu'il ne peut pas y avoir un autre order = 1. Mais si user_id = 2 je peux avoir order = 1 à nouveau?

Ou est-ce mieux / plus rapide de contrôler cela dans un script php qui s'interface avec mysql?

Réponses:

2 pour la réponse № 1

Vous posez quelques questions indépendantes.

(1) Oui, vous pouvez avoir des commandes uniques uniquement pour un client. Dans ce cas, vous devez créer un index unique en utilisant les deux colonnes.

(2) Est-il mieux / plus rapide de contrôler cela en phpscript qui s'interface avec mysql? La première question concerne l'intégrité des données et non les performances. Il sera plus rapide de générer de nouveaux word_id "s s'il s'agit d'une colonne à incrémentation automatique, sinon votre code PHP doit interroger la base de données pour rechercher la plus grande valeur et en ajouter une.

Si vous voulez avoir un unique word_id par client,vous devrez les générer dans votre code PHP. MySQL ne peut pas générer de nouvelles valeurs d'incrémentation automatique basées sur une autre colonne (car vous utilisez InnoDB)


2 pour la réponse № 2

Vous pouvez avoir un index Compund qui applique l'unicité de ses valeurs composées comme ceci:

CREATE UNIQUE INDEX `myUniqueIndex` ON mytable (user_id, order)

Toute tentative d’insertion d’une ligne avec une valeur composée en double renvoie une erreur que vous pouvez rechercher.


0 pour la réponse № 3

Créez une clé composite unique sur 2 colonnes.

ALTER IGNORE TABLE tableName ADD UNIQUE KEY `someName` (user_id, `order`);