Maison > base de données > tutoriel mysql > Comment échanger des valeurs dans MySQL sans violations de contraintes uniques ?

Comment échanger des valeurs dans MySQL sans violations de contraintes uniques ?

Linda Hamilton
Libérer: 2024-10-26 05:07:31
original
340 Les gens l'ont consulté

How to Swap Values in MySQL without Unique Constraint Violations?

Échanger des valeurs dans MySQL sans violations de contrainte unique

Dans MySQL, échanger des valeurs entre deux lignes peut être difficile lorsqu'une contrainte unique est appliquée à la colonne concernée. Le problème se pose car MySQL applique des vérifications de contraintes après chaque mise à jour de ligne, plutôt que la fin de l'instruction entière.

Pour résoudre cette limitation, envisagez la solution suivante :

<code class="sql">START TRANSACTION ;
    UPDATE tasks 
    SET priority = 
      CASE
        WHEN priority = 2 THEN -3 
        WHEN priority = 3 THEN -2 
      END 
    WHERE priority IN (2,3) ;

    UPDATE tasks 
    SET priority = - priority
    WHERE priority IN (-2,-3) ;
COMMIT ;</code>
Copier après la connexion

Dans cette solution , une transaction est initiée pour garantir que les deux mises à jour sont effectuées de manière atomique. Des valeurs négatives sont temporairement affectées aux priorités pour éviter les conflits avec la contrainte unique. Par la suite, une autre mise à jour attribue les valeurs négatives aux priorités d'origine, échangeant ainsi efficacement leurs valeurs.

Alternativement, si les valeurs négatives ne sont pas autorisées dans la colonne des priorités, vous pouvez utiliser des variables temporaires ou créer une table temporaire pour contenir les valeurs négatives. valeurs échangées. Cependant, ces méthodes peuvent impliquer plusieurs requêtes.

Il est important de noter qu'il n'est pas recommandé de supprimer temporairement la contrainte unique, car cela peut compromettre l'intégrité des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal