MySQLでテーブルを全て、または正規表現で指定して削除する方法

投稿者: Anonymous

MySQLのDROP TABLEDROP TABLE TABLE1 TABLE2のように列挙することでまとめて削除できますが、全て削除したい、または正規表現で指定して削除するための方法を共有します。

テーブル例

データベース名:test_database
テーブル:
    table_2012
    table_2012_test1
    table_2012_test2
    table_2013
    table_2014
    table_2014_test1
    table_2015

testとついているテーブルだけを削除したいとします。

削除対象

データベース名:test_database
テーブル:
    table_2012_test1
    table_2012_test2
    table_2014_test1

解決

Linux環境のみとなりますが、テーブル名の一覧を取得し、egrepで正規表現による絞り込みを行い、xargsで対象テーブルを渡すことで実現できました。

mysql -h ホスト名 -u ユーザ名 -pパスワード -D test_database -e "show tables" -s | egrep "test" | xargs -I "@@" echo mysql -h ホスト名 -u ユーザ名 -pパスワード -D test_database -e "DROP TABLE @@"

危険な操作なので、参考URLに倣ってechoでコンソール表示するだけにしてあります。
実際にテーブルを削除する際はコマンド内のechoを削除して実行してください。

全てのテーブルを削除する際は、egrepのパイプは不要です。

参考URL:https://stackoverflow.com/questions/456751/drop-mysql-databases-matching-some-wildcard

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *