sql >> Database >  >> RDS >> Mysql

Als ik meerdere rijen INVOER in een MySQL-tabel, worden de ID's dan elke keer met 1 verhoogd?

Het antwoord is:nou, het hangt ervan af.

In het geval van myisam is het antwoord een volmondig ja, aangezien myisam-sequenties verzoeken invoegen.

In het geval van innodb is het gedrag echter configureerbaar sinds mysql v5.1. vóór v5.1, dan is het antwoord voor InnoDB ook ja, daarna hangt het af van de innodb_autoinc_lock_mode instelling. Zie mysql-documentatie over InnoDB auto_increment-configuratie voor details .

Om u de hoogtepunten te geven, zijn er 3 innodb_autoinc_lock_mode instellingen:

  1. traditioneel (0)
  2. opeenvolgend (1) - standaard
  3. doorschoten (2)

Verdere lacunes kunnen optreden in de auto_increment-waarde, als een transactie is teruggedraaid. Een bulkinsert kan alleen in zijn geheel worden teruggerold.

UPDATE: Zoals hierboven beschreven, krijg je scenario 1) of 2) , als u gebruik maakt van

  • myisam-tabelengine
  • of innodb pre mysql v5.1
  • of innodb met mysql v5.1 of nieuwer en de innodb_autoinc_lock_mode is 0 of 1

Er is geen manier om te zien welke als eerste wordt ingevoegd.

Mogelijk krijgt u scenario 3) of 4) als je

. gebruikt
  • innodb met innodb_autoinc_lock_mode 2

Nogmaals, er is geen manier om te vertellen hoe en waarom mysql de volgorde van de records door elkaar haalt.

Dus, als uw vraag gerelateerd is aan het feit dat u 3 records invoegt met bulk insert en last_insert_id() retourneert alleen de auto_increment waarde van de eerste ingevoegde record, en u wilt de id's van de andere 2 records krijgen door eenvoudig toe te voegen dat u moet mogelijk de configuratie van mysql controleren op basis van de gebruikte tabel-engine en mysql-versie.



  1. Optimale MySQL-configuratie (my.cnf)

  2. Hoe PostgreSQL op DigitalOcean te implementeren

  3. Verkeerd gebruik van UNION en ORDER BY?

  4. Wederzijdse vrienden sql met join (Mysql)