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

Colonne MySQL di incremento automatico su TRANSACTION, COMMIT e ROLLBACK

No, i meccanismi di incremento automatico devono lavorare al di fuori dell'ambito delle transazioni, perché un altro utente potrebbe essere inserito nella stessa tabella prima che tu abbia terminato la transazione. La transazione dell'altro utente deve essere in grado di allocare il valore successivo, prima di sapere se la transazione utilizza il valore appena assegnato.

In merito al tuo commento:se posso dirlo in modo più chiaro, qualsiasi modifica nell'ambito di una transazione potrebbe essere annullata. Il contatore dell'incremento automatico non viene ripristinato, quindi non obbedisce all'atomicità di transazioni. Né obbedisce all'isolamento perché un'altra transazione ottiene il valore successivo anche se la transazione non è stata ancora impegnata.

Il modo in cui funziona l'incremento automatico significa che a volte, se inserisci alcune righe e poi esegui il rollback della transazione, i valori che hai allocato con l'incremento automatico vengono persi per sempre!

Ma questo va bene. I valori delle chiavi primarie devono essere univoci, ma non consecutivi. In altre parole, non sono numeri di riga e non dovresti usarli in questo modo. Quindi non dovresti mai aver bisogno di decrementare i valori creati dall'incremento automatico.