Come eliminare tutte le tabelle MySQL dalla riga di comando?


29

Di solito apro Terminal.app e mi collego a un database MySQL remoto.

Quindi uso questo comando per eliminare una tabella:

mysql> drop table [table name];

Ma ciò di cui ho bisogno è la riga di comando per eliminare tutte le tabelle nel database.

Se uso:

mysql> drop database [database name];

Distruggerò completamente il database e non sarò più in grado di creare tabelle. Ho ragione?


Risposte:


27

È possibile eliminare il database quindi ricrearlo immediatamente:

mysql> drop database [database name];
mysql> create database [database name];

In alternativa, è possibile utilizzare uno script per eliminare ogni tabella nel database.


ok, per essere sicuro: mi collego al database remoto nel Terminale con questa linea: / Applicazioni / MAMP / Libreria / bin / mysql -h 80.54.554.10 -u adm_user -p my_db . Dopo aver lasciato cadere e creato il database come hai detto, dovrò cambiare questi valori di connessione o rimarranno gli stessi?
Chefnelone,

1
@chef: eliminare tutte le tabelle e rilasciare l'intero database non ha lo stesso effetto. Se si rilasciano solo le tabelle, rimarranno autorizzazioni a livello di database, non così se si elimina / ricrea il database.
Nifle,

10
@chefnelone: ​​stai attento !!! Il rilascio di un database elimina anche le procedure memorizzate e le viste definite dall'utente.
RolandoMySQLDBA

Abbastanza chiaro per me. Vado con lo script per eliminare ogni tabella.
Chefnelone,

1
è totalmente pericoloso, vedere i commenti http://stackoverflow.com/a/12403742/1713660
vladkras,

10

Puoi provare il seguente comando:

mysqldump --no-data --add-drop-table DB_NAME | grep ^DROP | mysql -v DB_NAME

O:

mysql --silent --skip-column-names -e "SHOW TABLES" DB_NAME | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -v DB_NAME

Dov'è DB_NAMEil nome del tuo database. Credenziali del database che è possibile specificare ~/.my.cnfo aggiungendole al comando (ad es -uroot -proot.).

Questo metodo presenta alcuni vantaggi rispetto all'eliminazione e alla creazione del database nel caso in cui l'utente del database non disponga dell'autorizzazione per eliminarlo.


1
Secondo esempio confermato, fantastico. Aggiungi le credenziali db come flag aggiuntivi prima --silente -v/ --verboserispettivamente come:--user=username --password=password --host=host.name
qui

Buona idea. Ma hai qualche problema quando c'è CHIAVE ESTERA. Aggiungo | sort -ralla riga inversa, ma ancora non compatibile alcuni db.
Fancyoung,

2

mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "SHOW TABLES" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%;' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE


2
Benvenuto in Super User! Sebbene ciò possa rispondere alla domanda, sarebbe una risposta migliore se tu potessi spiegare perché lo fa. Siamo alla ricerca di risposte complete e di alta qualità che forniscano una spiegazione e un contesto. Non dare solo una risposta di una riga; spiega perché la tua risposta è giusta, idealmente con citazioni. Le risposte che non includono spiegazioni potrebbero essere rimosse. Inoltre, controlla la formattazione.
G-Man dice "Reinstate Monica"

Non dimenticare set foreign_key_checks = 1 dopo tavoli goccia: vedi stackoverflow.com/a/2873991/4306855 mysql -u USERHERE -pPASSWORDHERE --silent --skip-colonna-nomi -e "MOSTRA Tabelle" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%; SET FOREIGN_KEY_CHECKS = 1; ' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE
toto21
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.