
Originalmente inviato da
debug
Non ti deve "localizzare" l'ID mancante, ma l'ultimo memorizzato, così da usarlo nella query che ti ho postato sopra:
ALTER TABLE tabella AUTO_INCREMENT = XX+1;
dove XX è il risultato dello script che determina l'ultimo id memorizzato (puoi usare la funzione MAX(campo_id) per determinarlo)
Ciao!
Scusa debug,
o non ho capito io o non sono daccordo.
con
Codice:
ALTER TABLE tabella AUTO_INCREMENT = XX+1;
ha lo stesso risultato di come se inserisse un record utilizzando l'autoincrement, lui invece vorrebbe che gli id scalassero e andassero a riempire il range id dei record che sono stati eliminati, quindi le chiavi senza record insomma.
Per quanto ne so io, abbozzando un pò di pseudocodice potresti scandire la tabella con un comando iterativo e tramite due "puntatori" verifichi la condizione:
IDprimopuntatore=1;
IDsecondopuntatore = 2;
while(...){
se (IDprimopuntatore+1)!=IDsecondopuntatore
modifichi l'id di IDsecondopuntatore con id+1 di IDprimopuntatore
altrimenti
se IDprimopuntatore=1 e IDsecondopuntatore=2
IDprimopuntatore+1 == IDsecondopuntatore //allora è ordinata unitariamente e continui la scansione
IDsecondopuntatore++;
IDprimopuntatore++;
}
come pseudocodice, sempre se si può implementare,ha complessità lineare, quindi il tempo di calcolo aumenta linearmente in base all'aumentare degli n record della tabella, senza contare il tempo per le funzioni di mysql.
spero proprio che esista un metodo migliore..