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 :
- traditionnel (0)
- consécutif (1) - par défaut
- 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.