Mysql
 sql >> Database >  >> RDS >> Mysql

Quando INSERTO più righe in una tabella MySQL, gli ID aumenteranno di 1 ogni volta?

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:

  1. tradizionale (0)
  2. consecutivo (1) - predefinito
  3. 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.