InnoDB
è un motore transazionale.
Ciò significa che nel seguente scenario:
Session A
inserisce il record1
Session B
inserisce il record2
Session A
torna 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).