web-dev-qa-db-fra.com

La colonne Auto Incrément de MySQL augmente après une erreur d'insertion.

Je faisais des tests d'insertion dans ma base de données et je me suis rendu compte que lorsque l'instruction insertion échoue, une erreur dû 1452, provoque une augmentation de la valeur Auto_inCrimentation par 1. Même si aucune ligne n'a été insérée dans cette déclaration.

Ainsi, ce comportement entraîne la prochaine insertion valide ignore une valeur disponible et disponible pour l'auto_incrènement.

Exemple:

1st Insert | Result: Success | id(auto_increment_column): 1       |
2nd Insert | Result: Failure | -------- No rows were recorded---- |
3nd Insert | Result: Success | id(auto_increment_column): 3       |

Je veux savoir si quelqu'un avait ce problème avant et si c'est vraiment un problème.

Acclamations.

P.s.:

Erno: 1452 - La contrainte FK échoue. Cela signifie que j'essaie de faire référence à une valeur de colonne dans une autre table et cette valeur n'existe pas là.

  • Base de données: MySQL Ver 14.14 Distribuez 5.6.13, pour Windows 64 bits
  • Moteur de stockage: Innodb

Dernière phrase de la documentation de MySQL sur Verrouillage traditionnel InnoDB Incrément automatique dit

Vous pouvez voir des lacunes dans la séquence de valeurs attribuée à la colonne Auto_inCremmentation si vous réduisez les transactions en arrière qui ont généré des numéros à l'aide du compteur.

Par conséquent, si le deuxième insert avait échoué et roulé, il fait l'écart.

Vous devrez peut-être avoir à définir innodb_autoinc_lock_mode à 0 ou 2. Veuillez lire la documentation MySQL sur Verrouillage automatique InnoDB Incrément automatique configurable pour comprendre ce que changer innodb_autoinc_lock_mode peut faire pour vous.

4
RolandoMySQLDBA