Elimina tutte le tabelle in MySQL
- Query SQL per eliminare tutte le tabelle
- Svuota e ricrea il database
- Verifica delle tabelle eliminate
Questo tutorial mostra diversi modi in cui un utente può rilasciare tutte le tabelle in MySQL ed elenca script di esempio per renderlo possibile.
Il motivo per cui non è possibile eliminare completamente tutte le tabelle in una singola riga di codice è che in un database ampio e ben progettato, ci saranno probabilmente molti vincoli di chiave esterna.
Query SQL per eliminare tutte le tabelle
-
La prima cosa da fare è fare in modo che per eliminare le tabelle non sia necessario controllare i vincoli della chiave esterna.
SET FOREIGN_KEY_CHECKS = 0;
-
Quindi procedere alla scrittura di uno script per interrogare tutte le tabelle all’interno del database.
SELECT table_name FROM information_schema.tables WHERE table_schema = db_name;
-
Successivamente, copia tutte le tabelle nel risultato della query precedente ed eliminale una per una.
DROP TABLE IF EXISTS tableOne; DROP TABLE IF EXISTS tableTwo; DROP TABLE IF EXISTS tableThree; DROP TABLE IF EXISTS tableEtc;
-
Reimposta la configurazione del controllo della chiave esterna ai valori predefiniti
SET FOREIGN_KEY_CHECKS = 1;
Questo approccio è possibile perché abbiamo disabilitato il controllo della chiave esterna all’inizio. Quindi, qualunque sia l’ordine in cui cancelliamo le tabelle, non genererà alcun errore di vincolo. Assicurati solo di riattivare il controllo della chiave esterna dopo lo script.
Svuota e ricrea il database
Affinché ciò sia possibile, è necessario assicurarsi che oltre alle tabelle, si sia anche disposti a eliminare funzioni, indici, ruoli e altre impostazioni archiviate oltre alle tabelle poiché si elimina l’intero database.
Affinché questo venga eseguito con successo, il ruolo corrente deve avere i privilegi di drop
e create
nel database.
DROP DATABASE database_name;
Dopo l’eliminazione, ricrea il database.
CREATE DATABASE database_name;
Questo approccio è molto probabilmente il metodo più volatile per eliminare tutte le tabelle. Questo è adatto solo per database piccoli o sperimentali.
Usa mysqldump
per eliminare le tabelle in MySQL
mysqldump
è un comando della console attribuito da MySQL. Supponendo che tu abbia già impostato MySQL nelle tue variabili di percorso, possiamo usare il comando per rilasciare le tabelle all’interno del tuo database.
-
Il primo passo è ancora disabilitare il controllo delle chiavi esterne nella console.
echo "SET FOREIGN_KEY_CHECKS = 0" > ./temp.sql
-
Procedi con il dump del database usando
mysqldump
e rilascia le tabellemysqldump --add-drop-table --no-data -u rootuser -p database_name | grep 'DROP TABLE' >> ./temp.sql
-
Riattiva il controllo delle chiavi esterne nella console.
echo "SET FOREIGN_KEY_CHECKS = 1;" >> ./temp.sql
-
Ripristina il database utilizzando il file dump
mysql -u root -p db_name < ./temp.sql
Questo funzionerà più facilmente se hai conoscenza dei comandi della console e hai MySQL impostato nella tua variabile di percorso.
Verifica delle tabelle eliminate
Per verificare se tutte le tabelle sono state effettivamente eliminate, possiamo controllare il database se restituisce ancora le tabelle con questo script.
SHOW TABLES FROM database_name;
Se non è presente alcun output, significa che la query è stata eseguita correttamente e tutte le tabelle SQL di quel database specifico sono state eliminate.
In sintesi, il motivo per cui non è possibile eliminare le tabelle in blocco direttamente in SQL è che i database relazionali fanno molto affidamento su relazioni e vincoli. Se ti è stato permesso di eliminare le tabelle senza disabilitare esplicitamente il controllo della chiave esterna, le relazioni, i vincoli e le configurazioni della chiave esterna saranno danneggiati.
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn