Devo eliminare tutte le righe da una tabella ma quando aggiungo una nuova riga, desidero che l'ID chiave principale, che ha un incremento automatico, ricomincia da 0 rispettivamente da 1.
Devo eliminare tutte le righe da una tabella ma quando aggiungo una nuova riga, desidero che l'ID chiave principale, che ha un incremento automatico, ricomincia da 0 rispettivamente da 1.
Risposte:
Non eliminare, utilizzare troncare:
Truncate table XXX
Il gestore della tabella non ricorda l'ultimo valore AUTO_INCREMENT utilizzato, ma inizia il conteggio dall'inizio. Questo vale anche per MyISAM e InnoDB, che normalmente non riutilizzano i valori della sequenza.
Fonte .
Se non è possibile utilizzare TRUNCATE(ad esempio a causa di vincoli di chiave esterna) è possibile utilizzare una tabella di modifica dopo aver eliminato tutte le righe per riavviare l'auto_increment:
ALTER TABLE mytable AUTO_INCREMENT = 1
DELETE FROM tablename;(ma che non funzionerà bene quando ci sono vincoli FK - vedi stackoverflow.com/a/5452798/507761 )
Se la tabella ha chiavi esterne, utilizzo sempre il seguente codice:
SET FOREIGN_KEY_CHECKS = 0; -- disable a foreign keys check
SET AUTOCOMMIT = 0; -- disable autocommit
START TRANSACTION; -- begin transaction
/*
DELETE FROM table_name;
ALTER TABLE table_name AUTO_INCREMENT = 1;
-- or
TRUNCATE table_name;
-- or
DROP TABLE table_name;
CREATE TABLE table_name ( ... );
*/
SET FOREIGN_KEY_CHECKS = 1; -- enable a foreign keys check
COMMIT; -- make a commit
SET AUTOCOMMIT = 1 ;
Ma la differenza sarà nei tempi di esecuzione. Guarda sopra la risposta di Sorin.
Un fatto interessante
Ero sicuro che TRUNCATEsarà sempre un rendimento migliore, ma nel mio caso, per un database con circa 30 tavoli con chiavi esterne, popolati con poche righe, ci sono voluti circa 12 secondi per TRUNCATEtutti i tavoli, in contrapposizione a solo poche centinaia di millisecondi per DELETEil filari. L'impostazione dell'incremento automatico aggiunge circa un secondo in totale, ma è ancora molto meglio.
Quindi suggerirei di provare entrambi, vedi quale funziona più velocemente per il tuo caso.