INSERT ... ON DUPLICATE KEY UPDATE est décrit comme un "insert en mode mixte" pour les besoins de AUTO_INCREMENT d'InnoDB manutention. Les inserts en mode mixte sont essentiellement ceux où le maximum nombre d'AUTO_INCREMENT requis les valeurs sont connues, mais le montant qui sera réellement nécessaire n'est pas.
Les insertions en mode mixte sont gérées spécialement par défaut, comme décrit dans le Documentation MySQL :
Si vous utilisez InnoDB, vos alternatives sont :
- Éviter
INSERT ... ON DUPLICATE KEY UPDATE. - Définissez le
innodb_autoinc_lock_modeparamètre à0, pour le mode de verrouillage d'auto-incrémentation "traditionnel", qui garantit que tous lesINSERTles instructions attribueront des valeurs consécutives pourAUTO_INCREMENTColonnes. Cependant, cela est accompli en verrouillant pendant l'instruction, il y a donc une perte de performances associée à ce paramètre. - (Recommandé) Ignorer les espaces dans le
AUTO_INCREMENTcolonne.
Remarque :AUTO_INCREMENT la gestion est totalement différente sous MyISAM, qui ne présente pas ce comportement.