sql >> Databasteknik >  >> RDS >> Mysql

När jag infogar flera rader i en MySQL-tabell, kommer ID:n att öka med 1 varje gång?

Svaret är:ja, det beror på.

När det gäller myisam är svaret ett definitivt ja, eftersom myisam-sekvenser infogar förfrågningar.

I fallet med innodb är dock beteendet konfigurerbart sedan mysql v5.1. före v5.1, då är svaret för InnoDB också ja, efter det beror det på innodb_autoinc_lock_mode miljö. Se mysql-dokumentationen om InnoDB auto_increment-konfiguration för mer information .

För att ge dig höjdpunkterna finns det 3 innodb_autoinc_lock_mode inställningar:

  1. traditionell (0)
  2. konsekvent (1) - standard
  3. interfolierad (2)

Ytterligare luckor kan uppstå i auto_increment-värdet, om en transaktion har återställts. En bulkinsats kan bara rullas tillbaka i sin helhet.

UPPDATERING: Som beskrivits ovan får du scenario 1) eller 2) , om du använder

  • myisam-tabellmotor
  • eller innodb pre mysql v5.1
  • eller innodb med mysql v5.1 eller nyare och innodb_autoinc_lock_mode är 0 eller 1

Det finns inget sätt att avgöra vilken som sätts in först.

Du kan få scenario 3) eller 4) om du använder

  • innodb med innodb_autoinc_lock_mode 2

Återigen, det finns inget sätt att säga hur och varför mysql blandar ihop ordningen på posterna.

Så om din fråga är relaterad till det faktum att du infogar 3 poster med bulk insert och last_insert_id() returnerar auto_increment-värdet endast för den första infogade posten, och du vill få ID:t för de andra 2 posterna genom enkel tillägg är att du kan behöva kontrollera mysqls konfiguration baserat på tabellmotorn och mysql-versionen som används.



  1. Vad är skillnaden mellan CHAR och VARCHAR i SQL Server - SQL Server / T-SQL Tutorial Del 31

  2. MySQL:s "secure-file-priv" tillåter inte att ladda data i en fil, inte ens från den tilldelade säkra mappen

  3. vad gör mysql_real_escape_string() egentligen?

  4. MySQL CHAR()-funktion och UTF8-utgång?