SQL перебирает таблицы и удаляет, если не определено имя

Я хочу отбросить почти все таблицы в моей базе данных (всего 9000). Не спрашивайте меня, почему их так много, слишком долго, чтобы объяснить.

Итак, у меня есть 3 таблицы, которые я не хочу отбрасывать.

Какой оператор SQL я могу использовать для этого? Я давно гуглю, но ничего не вышло!

Так что я имею в виду что-то вроде этого (в PHP):

foreach($tab as $tableList){
if($tab!='foo'&&$tab!='bar'&&$tab!='foofoobar')
mysql_query('DROP TABLE '.$tab);
}

Есть идеи? даже лучше, если бы все могло быть заявлением mysql!

3 ответа

Решение
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'

выдаст вам все таблицы в базе данных 'db_name'.

Не забудьте сделать резервную копию ваших таблиц перед запуском DROP заявления.

Вы можете использовать PHP для выполнения инструкций DROP или динамического SQL с чем-то вроде этого:

(скопировано из этого вопроса: Удаление динамически управляемых таблиц в mysql)

SET @v = ( SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(it.table_name) )
           FROM information_schema.tables it 
           WHERE it.table_name NOT IN ('TableToKeep_1', 'Keep_2', 'Keep_3')
             AND it.table_schema = 'db_name' ;
         ) ;
PREPARE stDropTables FROM @v; 
EXECUTE stDropTables ;

Вы можете удалить более одной таблицы одновременно, используя запятую.

     DROP TABLE table_1, table_2, etc;

Из вашего кода PHP, я думаю, что вы должны использовать OR не И...

foreach($tab as $tableList){
if($tab!='foo'|| $tab!='bar' || $tab!='3rdtablename')
mysql_query('DROP TABLE '.$tab);
}

по понятной причине.

хорошо, если вы хотите сделать это в MySQL,

Вы можете сначала перечислить все таблицы... используя

show tables > whateverfile.txt

и сохранить в файле... редактировать файл по мере необходимости... т.е. удалить имена таблиц, которые не должны быть удалены, и добавить DROP TABLE до первой строки файла и выполните его в MysQL... mysql < whateverfile.txt....

Другие вопросы по тегам