2013-04-27 2 views

ответ

11

Вы можете построить DROP TABLE заявление с несколькими перечисленных таблиц и выполнить запрос с использованием MySQL подготовленных операторов -

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

Этот, похоже, работает. Спасибо, Деварт! – ARMAGEDDON

+0

Супер кусок кода - и в сочетании с IN() вы также можете хранить несколько таблиц – Antony

+0

@Devart, как проверить значение null для таблиц переменных –

4

Вы не можете удалить несколько таблиц в MySQL.

Проще всего в вашем случае было бы экспортировать таблицу, которую вы хотите сохранить (используя такой инструмент, как mysqldump), затем отбросьте и заново создайте базу данных.

+0

Моя таблица настолько велика, что я не хочу, чтобы экспортировать , Тогда было бы легче сбросить каждый стол в одиночку. – ARMAGEDDON

+1

Тогда вы должны взглянуть на этот вопрос: http://stackoverflow.com/questions/1454328/is-there-a-mysql-command-to-implement-something-like-drop-tables-except-t1-b2 –

0

Вы можете построить все заявления падения выводить их информационный файл и использовать файл после этого

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

Интересно, почему никто не предложил поехать в каталог:

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

и удалить их легко ли? это то, что я сделал, и кажется, работает

+1

Это сработало бы, если бы все таблицы были таблицами MyISAM. Если в базе данных есть таблицы InnoDB, тогда это было бы не так просто ... – GregD

0

Вы можете использовать mysqldump, попробуйте!

mysqldump -u[USERNAME] -p[PASSWORD]--add-drop-table --no-data [DATABASE] | 
grep ^DROP | 
grep -v 'my_table' | 
mysql -u[USERNAME] -p[PASSWORD] [DATABASE] 
Смежные вопросы