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

INSERT INTO ... ON DUPLICATE UPDATE toutes les valeurs

INSERT INTO … ON DUPLICATE KEY UPDATE fonctionne comme suit :

  • il tente d'insérer une ligne comme d'habitude
  • si une violation de contrainte dans une colonne se produit, il exécute le UPDATE à la place sur la ligne existante avec laquelle le INSERT déclaration en conflit

Cela signifie simplement que si le UPDATE instruction seule réussirait, son ON DUPLICATE KEY UPDATE équivalent fonctionnera également. Cela signifie que vous ne pouvez évidemment violer aucune contrainte dans le UPDATE instruction non plus, ou tout échouera (par exemple, essayer de définir une valeur sur un UNIQUE colonne qui existe déjà dans une autre ligne).

Si vous définissez à nouveau la même valeur sur la même colonne, il s'agit essentiellement d'un no-op. La valeur dans la colonne ne change pas et ne peut donc pas non plus provoquer d'erreurs (supposons que vous n'avez pas de BEFORE UPDATE vraiment funky déclencheurs qui peuvent mal se comporter). Le nombre de colonnes n'est pas pertinent ici, vous pouvez en modifier autant ou aussi peu que vous le souhaitez dans une déclaration.