Elimina tutte le tabelle in MySQL

Rayven Esplanada 19 dicembre 2022
  1. Query SQL per eliminare tutte le tabelle
  2. Svuota e ricrea il database
  3. Verifica delle tabelle eliminate
Elimina tutte le tabelle in MySQL

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 tabelle
    mysqldump --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.

Rayven Esplanada avatar Rayven Esplanada avatar

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

Articolo correlato - MySQL Table