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

Når jeg INDSÆTTER flere rækker i en MySQL-tabel, vil id'erne blive øget med 1 hver gang?

Svaret er:Nå, det afhænger af.

I tilfælde af myisam er svaret et klart ja, da myisam-sekvenser indsætter anmodninger.

I tilfælde af innodb er adfærden dog konfigurerbar siden mysql v5.1. før v5.1, så er svaret for InnoDB også ja, derefter afhænger det af innodb_autoinc_lock_mode indstilling. Se mysql-dokumentationen om InnoDB auto_increment-konfiguration for detaljer .

For at give dig højdepunkterne er der 3 innodb_autoinc_lock_mode indstillinger:

  1. traditionel (0)
  2. konsekvent (1) - standard
  3. indflettet (2)

Yderligere huller kan være erfaring i auto_increment-værdien, hvis en transaktion er blevet rullet tilbage. En bulk indsats kan kun rulles tilbage som en helhed.

OPDATERING: Som beskrevet ovenfor får du scenarie 1) eller 2) , hvis du bruger

  • myisam tabelmotor
  • eller innodb pre mysql v5.1
  • eller innodb med mysql v5.1 eller nyere og innodb_autoinc_lock_mode er 0 eller 1

Der er ingen måde at sige, hvilken der bliver indsat først.

Du får muligvis scenarie 3) eller 4) hvis du bruger

  • innodb med innodb_autoinc_lock_mode 2

Igen, der er ingen måde at fortælle hvordan og hvorfor mysql blander rækkefølgen af ​​posterne.

Så hvis dit spørgsmål er relateret til det faktum, at du indsætter 3 poster med bulk insert og last_insert_id() returnerer kun auto_increment-værdien af ​​den første indsatte post, og du vil have id'erne for de andre 2 poster ved simpel tilføjelse, er det, at du skal muligvis kontrollere mysql's konfiguration baseret på den anvendte tabelmotor og mysql-version.



  1. Sådan får du identitetskolonneværdier uden at nævne Identitetskolonnenavn i Select - SQL Server / T-SQL vejledning del 46

  2. ) Operatør for begyndere

  3. Forøg søjler i laravel

  4. i SQLite