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_mode
paramètre à0
, pour le mode de verrouillage d'auto-incrémentation "traditionnel", qui garantit que tous lesINSERT
les instructions attribueront des valeurs consécutives pourAUTO_INCREMENT
Colonnes. 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_INCREMENT
colonne.
Remarque :AUTO_INCREMENT
la gestion est totalement différente sous MyISAM, qui ne présente pas ce comportement.