事前に名前を知らなくても、データベース内のすべてのテーブルを削除する必要があります。一般的な手順は、データベースを削除してから再作成することですが、これはオプションではありません。それを行う最良の方法は何ですか?
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]
今では制約を無視します。
information_schema テーブルを使用してデータベースに関するメタデータをフェッチし、そこにリストされているテーブルを削除する必要があります。
簡単なシェルスクリプトを試してみることもできます。
#!/bin/bash
IFS=$'\n'
for table in `mysql <databaseName> -N -e 'show tables'`; do
echo mysql <databaseName> -e "drop table $table"
done
期待どおりに機能することを確認したら、echo
を削除します。
Xaprbブログのエントリ が最近これをうまくカバーしています。
これには、INFORMATION_SCHEMA
の使用が常に良いとは限らない理由が含まれています Maatkit でこれらの素敵な人々からのツールを参照します。
mk-find
で次のことを試してください。
mk-find '<database>' --printf 'DROP TABLE %D.%N'
結果に満足している場合:
mk-find '<database>' --exec 'DROP TABLE %D.%N'