Ho 100 tabelle nel mio database, voglio mantenerne una solo.Elimina tutte le tabelle tranne una in MySql
ho provato qualcosa di simile di seguito query:
DROP ALL TABLES EXCEPT my_table
Ma questo non sembra esistere. qualche idea?
Ho 100 tabelle nel mio database, voglio mantenerne una solo.Elimina tutte le tabelle tranne una in MySql
ho provato qualcosa di simile di seguito query:
DROP ALL TABLES EXCEPT my_table
Ma questo non sembra esistere. qualche idea?
È 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;
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.
Il mio tavolo è così grande non voglio esportarlo . Sarebbe quindi più facile rilasciare ogni tavolo da solo. – ARMAGEDDON
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 –
È 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;
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
Funzionerebbe, se tutte le tabelle fossero tabelle MyISAM. Se il database ha tabelle InnoDB, non sarebbe così facile ... – GregD
È 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]
Se si dispone di molte tabelle, prestare attenzione al troncamento mediante la funzione GROUP_CONCAT. Gode di una posizione per la lunghezza massima della stringa restituita: group_concat_max_len
See: GROUP_CONCAT reference manual entry
Questa risposta mi ha guidato alla soluzione: MYSQL: How to define or get LONG string variables
Questo sembra funzionare. Grazie Devart! – ARMAGEDDON
Super pezzo di codice - e combinato con IN() è possibile mantenere anche più tabelle – Antony
@Devart come controllare null per tabelle variabili –