Есть ли команда MySQL для реализации чего-то вроде “удалить таблицы, кроме t1, b2”?

StackOverflow https://stackoverflow.com/questions/1454328

  •  12-09-2019
  •  | 
  •  

Вопрос

Я хочу сохранить t1, t2 и удалить все остальные таблицы.

Это было полезно?

Решение

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

SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
  FROM information_schema.tables
  WHERE table_schema = DATABASE() AND table_name NOT IN ('foo', 'bar', 'baz');

(Тот самый DATABASE() функция возвращает текущее значение useбаза данных "d".)

Используя PREPARE и EXECUTE, вы могли бы даже избежать копирования и вставки и (в MySQL 5.0.13 и более поздних версиях) написать хранимую процедуру для этого.

Другие советы

Вы могли бы использовать mysqldump для генерации списка операторов DROP TABLE, отфильтровать те, которые вам не нужны, а затем передать их обратно в клиент mysql.Вот как мы это создаем

Во-первых, вот список инструкций DROP TABLE для базы данных

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP 

Теперь мы можем передать это через grep с помощью -v, чтобы инвертировать операторы match - we want, в которых не упоминаются таблицы, которые мы сохраняем (другим способом сделать это было бы --ignore-table options в mysqldump)

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP |  
grep -v 'foo\|bar'

Наконец, как только вы будете уверены, вы сможете передать это обратно в mysql

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \ 
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top