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 leINSERT
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.