Ho bisogno di cancellare tutte le righe da una tabella ma quando aggiungo una nuova riga, voglio che l'ID della chiave primaria, che ha un incremento automatico, ricomincia da 0 rispettivamente dal 1.MySQL Elimina tutte le righe dalla tabella e resetta l'ID a zero
risposta
non eliminare, l'uso troncare:
Truncate table XXX
handler la tabella non ricorda l'ultimo valore AUTO_INCREMENT utilizzato, ma inizia a contare fin dall'inizio. Questo è vero anche per MyISAM e InnoDB, che normalmente non riutilizzano i valori di sequenza.
Se non è possibile utilizzare TRUNCATE
(ad esempio a causa di vincoli di chiave) è possibile utilizzare una tabella alter dopo l'eliminazione di tutte le righe per riavviare l'auto_increment:
ALTER TABLE mytable AUTO_INCREMENT = 1
Questo non ha funzionato per me. Quale potrebbe essere la ragione? –
@NBhargav Perché potresti usare il motore InnoDB sul tuo tavolo invece di MyISAM, il primo non supporta il reset dell'indice. –
come eliminare tutte le righe prima di modificare il valore auto_increment –
Un fatto interessante.
ero sicuro TRUNCATE
sarà 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 TRUNCATE
tutte le tabelle, al contrario di solo poche centinaia di millisecondi a DELETE
le righe. L'impostazione dell'aumento automatico aggiunge circa un secondo in totale, ma è ancora molto meglio.
Quindi suggerirei di provare entrambi, vedere quale funziona più velocemente per il tuo caso.
Se tabella ha le chiavi esterne, allora io uso sempre 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à a tempo di esecuzione. Guarda sopra la risposta di Sorin.
Questo è un buon modo per avere dati orfani in qualsiasi tabella che contengono chiavi esterne al tavolo che stai cancellando. Abilitare i controlli delle chiavi esterne dopo che il fatto non ha causato a MySQL di riconvalidare quelle chiavi esterne per quanto ne so. Questo ti lascia con le righe che contengono dati che * non esiste * nella tabella di riferimento. Potresti anche non avere * chiavi estranee sul tuo tavolo. – cimmanon
- 1. Elimina tutte le righe nella tabella
- 2. Elimina tutte le righe da una tabella, genera nullpointer
- 3. Deadlock su MySQL che elimina le righe
- 4. Trigger MySQL: Elimina dalla tabella AFTER DELETE
- 5. MYSQL Elimina i primi duplicati dalla tabella
- 6. Elimina tutte le righe duplicate Excel vba
- 7. Elimina dati da tutte le tabelle in MYSQL
- 8. Elimina tutte le righe in una tabella basata su un'altra tabella
- 9. mySQL restituisce tutte le righe quando campo = 0
- 10. elimina tutto il record dalla tabella in mysql
- 11. Specialisti MySQL: Elimina tutte le righe più vecchie di x giorni ma non l'ultima
- 12. Elimina righe MySql o contrassegna "morto"?
- 13. LEFT JOIN non tornare tutte le righe
- 14. SQL Elimina righe in base a un'altra tabella
- 15. Rimuovere tutte le righe della tabella dalla tabella del database SQLite
- 16. Elimina 2 ° record duplicato in mySql Tabella
- 17. MYSQL Seleziona dalla tabella, ottieni le ultime/ultime 10 righe nella tabella
- 18. elimina righe di tabella sul controllo delle caselle di controllo
- 19. SQL INSERISCE righe mancanti dalla tabella A alla tabella B
- 20. Ottieni tutte le righe selezionate di mysql in una matrice
- 21. jQuery - come selezionare tutte le righe della tabella tra due righe della tabella nella stessa tabella
- 22. Eliminazione di righe dalla tabella degli utenti PHP MYSQL
- 23. Elimina tutte le tabelle tranne una in MySql
- 24. Timestamp MySql - orario diverso dopo l'aggiornamento di tutte le righe
- 25. conto esatto di tutte le righe di database MySQL
- 26. Elimina le righe in alto a "N" da una tabella con qualche ordinamento (ordine per "colonna")
- 27. Elimina righe vuote
- 28. MySQL - righe conteggio e LEFT JOIN problema
- 29. Il modo più efficiente per eliminare tutte le righe duplicate dalla tabella?
- 30. Left Outer Join non restituisce tutte le righe dalla mia tabella sinistra?
Truncate funziona bene con tabelle non vincolate, ma se la tabella ha un vincolo di chiave esterna, è possibile prendere in considerazione l'utilizzo del metodo Delete. Vedere questo post se si dispone di vincoli FK: [troncare la tabella vincolata chiave esterna] (http://stackoverflow.com/questions/5452760/truncate-foreign-key-constrained-table) –
ricordare che la tabella troncata non sta per rollback –