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

Perché MySQL aumenta automaticamente gli inserimenti non riusciti?

InnoDB è un motore transazionale.

Ciò significa che nel seguente scenario:

  1. Session A inserisce il record 1
  2. Session B inserisce il record 2
  3. 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).