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

Lorsque j'insère plusieurs lignes dans une table MySQL, les identifiants seront-ils incrémentés de 1 à chaque fois ?

La réponse est :eh bien, cela dépend.

Dans le cas de myisam, la réponse est définitivement oui, puisque les séquences myisam insèrent des requêtes.

Dans le cas d'innodb, cependant, le comportement est configurable depuis mysql v5.1. avant la v5.1, alors la réponse pour InnoDB est également oui, après cela cela dépend du innodb_autoinc_lock_mode paramètre. Voir la documentation mysql sur InnoDB auto_increment configuration pour plus de détails .

Pour vous donner les points forts, il y a 3 innodb_autoinc_lock_mode paramètres :

  1. traditionnel (0)
  2. consécutif (1) - par défaut
  3. entrelacé (2)

D'autres écarts peuvent être rencontrés dans la valeur auto_increment, si une transaction a été annulée. Une insertion en bloc ne peut être annulée que dans son ensemble.

MISE À JOUR : Comme décrit ci-dessus, vous obtiendrez le scénario 1) ou 2) , si vous utilisez

  • moteur de table myisam
  • ou innodb avant mysql v5.1
  • ou innodb avec mysql v5.1 ou plus récent et le innodb_autoinc_lock_mode vaut 0 ou 1

Il n'y a aucun moyen de savoir lequel est inséré en premier.

Vous pouvez obtenir le scénario 3) ou 4) si vous utilisez

  • innodb avec innodb_autoinc_lock_mode 2

Encore une fois, il n'y a aucun moyen de dire comment et pourquoi mysql mélange l'ordre des enregistrements.

Donc, si votre question est liée au fait que vous insérez 3 enregistrements avec insertion en bloc et que last_insert_id() renvoie la valeur auto_increment du premier enregistrement inséré uniquement, et que vous souhaitez obtenir les identifiants des 2 autres enregistrements par simple ajout, c'est que vous il peut être nécessaire de vérifier la configuration de mysql en fonction du moteur de table et de la version de mysql utilisée.