web-dev-qa-db-ja.com

データベースを削除せずにMySQLデータベースのすべてのテーブルを削除する方法は?

事前に名前を知らなくても、データベース内のすべてのテーブルを削除する必要があります。一般的な手順は、データベースを削除してから再作成することですが、これはオプションではありません。それを行う最良の方法は何ですか?

12
Angel Chiang

Mysqldumpを使用したより単純なbashワンライナーがあります( Thingy Ma Jig Blog から)。

mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP | mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

このエラーが発生した場合:

ERROR 1217 (23000) at line 1: Cannot delete or update a parent row: 
    a foreign key constraint fails

以下を試してください:

(echo 'SET foreign_key_checks = 0;'; 
 (mysqldump -u[USERNAME] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | 
     grep ^DROP); 
 echo 'SET foreign_key_checks = 1;') | \
    mysql -u[USERNAME] -p[PASSWORD] -b [DATABASE]

今では制約を無視します。

18
Angel Chiang

information_schema テーブルを使用してデータベースに関するメタデータをフェッチし、そこにリストされているテーブルを削除する必要があります。

5
Joril

簡単なシェルスクリプトを試してみることもできます。

#!/bin/bash

IFS=$'\n'
for table in `mysql <databaseName> -N -e 'show tables'`; do
    echo mysql <databaseName> -e "drop table $table"
done

期待どおりに機能することを確認したら、echoを削除します。

3
Jeff Snider

Xaprbブログのエントリ が最近これをうまくカバーしています。

これには、INFORMATION_SCHEMAの使用が常に良いとは限らない理由が含まれています Maatkit でこれらの素敵な人々からのツールを参照します。

mk-find で次のことを試してください。

mk-find '<database>' --printf 'DROP TABLE %D.%N'

結果に満足している場合:

mk-find '<database>' --exec 'DROP TABLE %D.%N'
0
Dan Carley