Ho avuto la necessità di eliminare tutte le tabelle in MySQL oggi. Il server di produzione non ha phpMyAdmin, che è il mio strumento preferito nel mio ambiente di sviluppo per gestire i database MySQL. Quindi ero bloccato con la console MySQL, e avevo bisogno di un modo semplice per fare il lavoro.
Come dico sempre “Google it”.
Ho trovato un elegante script su SOW. In questo articolo, descriverò cosa fa linea per linea.
SET FOREIGN_KEY_CHECKS = 0;
Questa linea disabilita i vincoli di chiave esterna. Se due tabelle sono associate l’una all’altra, non è possibile eliminare nessuna delle due tabelle. Il vincolo di chiave esterna non permette di farlo.
SET GROUP_CONCAT_MAX_LEN=32768;
Questa linea imposta la lunghezza massima della funzione CONCAT. Nelle linee seguenti dello script, vedrete una concatenazione. In alcune configurazioni di MySQL questo valore può essere troppo basso. Quindi, per evitare possibili errori, lo impostiamo abbastanza grande.
SET @tables = NULL;
Questa è la variabile che memorizza il nome delle tabelle.
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE());
Ricorda che tutto il tuo schema mysql è memorizzato nel database information_schema. SELECT DATABASE() è usato per determinare il database attualmente utilizzato. Questa linea seleziona la lista delle tabelle nel database corrente, e le decora con il carattere (`), e il risultato finale sarà memorizzato nella variabile tables in questo modo, `table_1`, `table_2`, …, `table_n`.
SELECT IFNULL(@tables,'dummy') INTO @tables;
Questa linea mette “dummy” alla variabile tables se la variabile è NULL. Questa linea assicura che la variabile tables non sia mai NULL.
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
Questa linea aggiunge “DROP TABLE IF EXISTS” prima della variabile tables. Quindi il risultato finale sarà DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n`.
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Non è necessario separare queste tre linee. Queste linee eseguono la frase SQL nella variabile tabelle.
SET FOREIGN_KEY_CHECKS = 1;
Infine questa linea abilita l’opzione di controllo del vincolo della chiave esterna.
Mi è piaciuto molto questo piccolo script. È davvero utile. Spero che vi aiuti a capire meglio come funziona.