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
....