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


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

テーブル例

[code]

    データベース名：test_database
    テーブル：
        table_2012
        table_2012_test1
        table_2012_test2
        table_2013
        table_2014
        table_2014_test1
        table_2015
    
[/code]

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

削除対象

[code]

    データベース名：test_database
    テーブル：
        table_2012_test1
        table_2012_test2
        table_2014_test1
    
[/code]




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

[code]

    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 @@"
    
[/code]

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

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

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




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

[code]

    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 @@"
    
[/code]

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

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

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

