InnoDB è un motore transazionale.
Ciò significa che nel seguente scenario:
Session Ainserisce il record1Session Binserisce il record2Session Atorna indietro
, esiste la possibilità di un gap o di una session B si bloccherebbe fino alla session A commesso o annullato.
InnoDB i progettisti (come la maggior parte degli altri progettisti di motori transazionali) hanno scelto di consentire lacune.
Dalla documentazione :
Quando si accede al contatore di incremento automatico, InnoDB utilizza uno speciale AUTO-INC a livello di tabella lock che mantiene fino alla fine del SQL corrente dichiarazione, non al termine della transazione. La speciale strategia di rilascio dei blocchi è stata introdotta per migliorare la concorrenza per gli inserimenti in una tabella contenente un AUTO_INCREMENT colonna
…
InnoDB utilizza il contatore di incremento automatico in memoria finché il server è in esecuzione. Quando il server viene arrestato e riavviato, InnoDB reinizializza il contatore per ogni tabella per il primo INSERT alla tabella, come descritto in precedenza.
Se hai paura dell'id colonna a capo automatico, rendilo BIGINT (8 byte di lunghezza).