sql >> Database >  >> RDS >> Mysql

Waarom neemt de automatische verhoging van MySQL toe bij mislukte invoegingen?

InnoDB is een transactie-engine.

Dit betekent dat in het volgende scenario:

  1. Session A voegt record 1 in
  2. Session B voegt record 2 in
  3. Session A rolt terug

, is er een mogelijkheid van een hiaat of session B zou vergrendelen tot de session A gepleegd of teruggedraaid.

InnoDB ontwerpers (zoals de meeste andere transactionele engine-ontwerpers) kozen ervoor om hiaten toe te staan.

Uit de documentatie :

Bij toegang tot de teller voor automatisch ophogen, InnoDB gebruikt een speciaal AUTO-INC op tabelniveau slot dat het aan het einde van de huidige SQL houdt verklaring, niet tot het einde van de transactie. De speciale ontgrendelingsstrategie is geïntroduceerd om de gelijktijdigheid van invoegingen in een tabel met een AUTO_INCREMENT te verbeteren kolom

InnoDB gebruikt de in-memory auto-increment-teller zolang de server draait. Wanneer de server wordt gestopt en opnieuw wordt opgestart, InnoDB initialiseert de teller voor elke tafel opnieuw voor de eerste INSERT naar de tafel, zoals eerder beschreven.

Als je bang bent voor de id kolomomloop, maak het BIGINT (8 bytes lang).



  1. Blokkeren, blokkeren, blokkeren op DBA's-deur met SQL Server-blokkering

  2. Converteren van asynchrone naar synchrone replicatie in PostgreSQL

  3. Hoe vervang ik een nieuwe regel in Oracle?

  4. Hoe Tomcat te configureren om verbinding te maken met MySQL