La risposta è:beh, dipende.
In caso di myisam, la risposta è decisamente sì, poiché le sequenze di myisam inseriscono richieste.
In caso di innodb, invece, il comportamento è configurabile a partire da mysql v5.1. prima della v5.1, quindi anche la risposta per InnoDB è sì, dopodiché dipende da innodb_autoinc_lock_mode
collocamento. Consulta la documentazione di mysql su Configurazione di InnoDB auto_increment per i dettagli
.
Per darti i punti salienti, ci sono 3 innodb_autoinc_lock_mode
impostazioni:
- tradizionale (0)
- consecutivo (1) - predefinito
- interlacciato (2)
Ulteriori lacune possono verificarsi nel valore auto_increment, se è stato eseguito il rollback di una transazione. Un inserto in blocco può essere ripristinato solo nella sua interezza.
AGGIORNAMENTO: Come descritto sopra, otterrai lo scenario 1) o 2) , se usi
- Motore tabelle myisam
- o innodb pre mysql v5.1
- o innodb con mysql v5.1 o successivo e
innodb_autoinc_lock_mode
è 0 o 1
Non c'è modo di sapere quale viene inserito per primo.
Potresti ottenere lo scenario 3) o 4) se usi
- innodb con
innodb_autoinc_lock_mode
2
Ancora una volta, non c'è modo di dire come e perché mysql confonde l'ordine dei record.
Quindi, se la tua domanda è correlata al fatto che inserisci 3 record con inserimento in blocco e last_insert_id() restituisce solo il valore auto_increment del primo record inserito e vuoi ottenere gli ID degli altri 2 record con una semplice aggiunta è che tu potrebbe essere necessario controllare la configurazione di mysql in base al motore della tabella e alla versione di mysql utilizzata.