2013-04-27 24 views

risposta

11

È possibile creare un'istruzione DROP TABLE con più quotata tavoli, ed eseguire la query utilizzando MySQL istruzioni preparate -

SET @tables = NULL; 
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables FROM information_schema.tables 
    WHERE table_schema = 'Database1' AND table_name <> 'my_table'; 

SET @tables = CONCAT('DROP TABLE ', @tables); 
PREPARE stmt1 FROM @tables; 
EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1; 
+0

Questo sembra funzionare. Grazie Devart! – ARMAGEDDON

+0

Super pezzo di codice - e combinato con IN() è possibile mantenere anche più tabelle – Antony

+0

@Devart come controllare null per tabelle variabili –

4

Non è possibile rilasciare più tabelle in MySQL.

Il modo più semplice nel tuo caso sarebbe quello di esportare la tabella che vuoi mantenere (usando uno strumento come mysqldump), quindi rilasciare e ricreare il database.

+0

Il mio tavolo è così grande non voglio esportarlo . Sarebbe quindi più facile rilasciare ogni tavolo da solo. – ARMAGEDDON

+1

Allora dovresti dare un'occhiata a questa domanda: http://stackoverflow.com/questions/1454328/is-there-a-mysql-command-to-implement-something-like-drop-tables-except-t1-b2 –

0

È possibile costruire tutti i file informazioni dichiarazioni goccia d'uscita e usare file dopo che

SELECT CONCAT('DROP TABLE ', table_name , ';') AS statement FROM information_schema.tables WHERE table_name not like 'table_to_keep' and table_schema like 'your_schema' into outfile 'path_to_file; 
source path_to_file; 
1

mi chiedo perché nessuno ha suggerito di andare al directory:

C:\Program Files (x86)\Parallels\Plesk\Databases\MySQL\data\user_db\... 

e eliminare li facilmente lì? questo è quello che ho fatto e sembra funzionare

+1

Funzionerebbe, se tutte le tabelle fossero tabelle MyISAM. Se il database ha tabelle InnoDB, non sarebbe così facile ... – GregD

0

È possibile utilizzare mysqldump, provalo!

mysqldump -u[USERNAME] -p[PASSWORD]--add-drop-table --no-data [DATABASE] | 
grep ^DROP | 
grep -v 'my_table' | 
mysql -u[USERNAME] -p[PASSWORD] [DATABASE] 
Problemi correlati