sql >> Databáze >  >> RDS >> Mysql

Proč se autoinkrement MySQL zvyšuje u neúspěšných vložení?

InnoDB je transakční motor.

To znamená, že v následujícím scénáři:

  1. Session A vloží záznam 1
  2. Session B vloží záznam 2
  3. Session A vrátí zpět

, existuje buď možnost mezery nebo session B zamkne až do session A potvrzeno nebo odvoláno.

InnoDB návrháři (stejně jako většina ostatních konstruktérů transakčních motorů) se rozhodli umožnit mezery.

Z dokumentace :

Při přístupu k čítači automatických přírůstků InnoDB používá speciální AUTO-INC na úrovni tabulky zámek, který si ponechá na konec aktuálního SQL výpis, nikoli do konce transakce. Speciální strategie uvolnění zámku byla zavedena s cílem zlepšit souběžnost pro vkládání do tabulky obsahující AUTO_INCREMENT sloupec

InnoDB používá čítač automatického přírůstku v paměti, dokud server běží. Když je server zastaven a restartován, InnoDB znovu inicializuje čítač pro každou tabulku pro první INSERT ke stolu, jak bylo popsáno dříve.

Pokud se bojíte id sloupec obtéká, aby byl BIGINT (8 bajtů dlouhý).



  1. sql join two table

  2. Jak zacházet s výjimkami to_date ve výpisu SELECT, aby se tyto řádky ignorovaly?

  3. Základy SQL Server Inner Join s příklady

  4. Upgradujte MySQL na MariaDB 10 (část 1 – Instalace MariaDB 5.5)