Un collega mi ha appena reso consapevole di un comportamento MySQL molto strano.Perché l'incremento automatico di MySQL aumenta in caso di inserimenti non riusciti?
Supponendo di disporre di una tabella con un campo auto_increment e un altro campo impostato su univoco (ad esempio un campo nome utente). Quando si tenta di inserire una riga con un nome utente già presente nella tabella, l'inserimento non riesce, come previsto. Tuttavia, il valore auto_increment è aumentato come si può vedere quando si inserisce una nuova voce valida dopo diversi tentativi falliti.
Per esempio, quando la nostra ultima voce assomiglia a questo ...
ID: 10
Username: myname
... e cerchiamo cinque new entry con lo stesso valore di nome utente sulla nostra prossima inserto avremo creato una nuova riga come così:
ID: 16
Username: mynewname
Anche se questo non è un grosso problema in sé sembra un vettore di attacco molto stupido per uccidere un tavolo da inondazioni con le richieste di inserimento falliti, come i MySQL riferimento stati manuali:
"Il comportamento del meccanismo di auto-incremento non è definito se [...] il valore diventa maggiore del numero intero massimo che può essere memorizzato nel tipo di intero specificato."
È questo comportamento previsto?
vostro vettore di attacco sembra un non problema. Se potessi invaderlo con richieste di inserimento non riuscite, potresti ugualmente invaderlo con richieste non riuscite? –
puoi portare un codice ** di riproduzione invece di spiegazioni manuali? –
@martin smith: Anche se è vero, penso che un'improvvisa ondata di nuovi utenti sarebbe più ovvia di un aumento silenzioso dell'auto_incremento che potrebbe benissimo cadere nel dimenticatoio se non fosse stato controllato. – Sorcy