February 3, 2009

Удалить все таблицы в базе MySQL одной строкой


Как удалить одной строкой (в том смысле что не писать кучу запросов типа DROP TABLE tablename;) все таблицы в базе данных MySQL. Кажется что может быть проще чем DROP ALL TABLES;. Ан нет! Нет такого запроса. Чтобы найти решение не пришлось долго рыться в бескрайнем интернете :) Делюсь  решением с вами.

mysql --silent --skip-column-names -u[USERNAME] -p[PASSWORD] [DATABASE] -e "show tables" | \
gawk '{print "drop table " $1 ";"}' | mysql -u [USERNAME] -p[PASSWORD] [DATABASE]

via

Второе решение этой задачи не заставило себя долго ждать
mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | \
grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

via. Какие то проблемы с этим вариантом есть с Windows... ну а кто этим занимается в винде? :)
Пользуйтесь!

3 comments:

  1. пригодилось, немного под себя подстроил:
    1. Собственно удаление:
    mysql --silent --skip-column-names --execute="show tables" --user=gallery_admin --password=pass gallery3 | awk '{print "drop table " $1 ";"}' | mysql --user=gallery_admin --password=pass gallery3
    2. Очистка истории:
    history -c

    FreeBSD 8.0

    ReplyDelete
    Replies
    1. Это лучшее решение! Спасибо.

      Delete
  2. Я такой вариант использую для всех массовых действий надо таблицами базы. Одновременно выводится и имя таблицы над которой совершается действие на случай, если возникнет какая-либо проблема во время выполнения.

    for i in `mysql -h [host] -u [username] -p [password] -se "SHOW TABLES LIKE '%'" [db]`; do echo $i; mysql -h [host] -u [username] -p [password] -se "DROP TABLE $i" [db]; done;

    ReplyDelete