MySQL è il database open source più popolare al mondo, riconosciuto per la sua velocità e affidabilità. Questo articolo esamina come eliminare tutti i dati da una tabella di database MySQL e come influisce sui campi incrementali automatici.
Elimina e tronca
Ci sono due modi per eliminare tutti i dati in una tabella di database MySQL.
TRUNCATE TABLE tablename;
Questo cancellerà tutti i dati nella tabella molto rapidamente. In MySQL la tabella viene effettivamente eliminata e ricreata, quindi la velocità della query. Il numero di righe eliminate per le tabelle MyISAM restituite è zero; per INNODB restituisce il numero effettivo eliminato.
DELETE FROM tablename;
Questo elimina anche tutti i dati nella tabella, ma non è veloce come usare il metodo “TRONCA TABELLA”. In MySQL > = 4.0 viene restituito il numero di righe eliminate; in MySQL 3.23 il numero restituito è sempre zero.
Colonne di incremento automatico per le tabelle MyISAM
Se si dispone di una colonna della chiave primaria di incremento automatico nella tabella MyISAM, il risultato sarà leggermente diverso a seconda del metodo di eliminazione utilizzato. Quando si utilizza il metodo “TRUNCATE TABLE”, il valore di seed di incremento automatico verrà ripristinato su 1. Quando si utilizza il metodo “ELIMINA DA” il seme di incremento automatico verrà lasciato come prima (ad esempio se il campo di incremento automatico dell’ultimo record inserito era 123 il prossimo record inserito sarà impostato su 124).
Nota che questo è vero per MySQL > = 4.0; dalla mia lettura della pagina di manuale di TRUNCATE in MySQL 3.23 TRUNCATE funziona proprio come DELETE che significherebbe che il seme di incremento automatico non viene resettato. Al momento non ho un database 3.23 impostato per testarlo, quindi non posso confermarlo.
Colonne di incremento automatico per le tabelle INNODB
Per le tabelle INNODB, se si utilizzano i metodi “TRONCA TABELLA” o “ELIMINA DA”, il campo di incremento automatico non verrà ripristinato. Se hai inserito 5 record in una nuova tabella, quindi eliminato tutti i record e inserito un altro record, il campo avrà un valore di 6, indipendentemente dal metodo utilizzato.
Aggiornamento 17 Feb 2009: ho originariamente scritto questo post quando MySQL 4.0 era la versione corrente. Ho appena testato quanto sopra ora su una tabella INNODB usando MySQL 5.0 e l’utilizzo di TRUNCATE ripristina il campo di incremento automatico al valore predefinito. Quindi o il comportamento è cambiato ad un certo punto o non ero corretto quando ho fatto la dichiarazione di cui sopra.
Sei veramente sicuro di voler eliminare tutti i dati?
Prima di eliminare tutti i dati in un database è necessario assicurarsi che si intende veramente eliminare tutti i dati. Spesso si paga prima di “SELECT * FROM tablename” o” SELECT COUNT(*) FROM tablename ” prima di farlo per verificare che sia davvero sicuro eliminare tutti i dati. Forse vuoi davvero fare qualcosa come” DELETE FROM tablename WHERE foo = ‘bar’ ” invece.