「t1,b2 以外のテーブルを削除」のようなものを実装する MySQL コマンドはありますか?
質問
t1、t2 を保持し、他のすべてのテーブルを削除したいと考えています。
解決
あなたは、テーブル名を検索するinformation_schema
を使用し、さらにDROP
文の束として結果を書式設定することができます。
SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name NOT IN ('foo', 'bar', 'baz');
(DATABASE()
機能は、現在use
'dデータベースを返す。)
PREPARE
とEXECUTE
を使用して、あなたもこれを実行するストアドプロシージャを作成(MySQLの5.0.13およびそれ以降)のコピー&ペーストを回避し、可能性があります。
他のヒント
mysqldump を使用して DROP TABLE ステートメントのリストを生成し、不要なステートメントをフィルタリングして除外し、それをパイプして mysql クライアントに戻すことができます。それを構築する方法は次のとおりです
まず、データベースの DROP TABLE table ステートメントのリストを次に示します。
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP
これで、-v を指定して grep にパイプして一致を反転できます。保持しているテーブルについて言及しないステートメントが必要です (これを行う別の方法は、mysqldump の --ignore-table オプションです)。
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP |
grep -v 'foo\|bar'
最後に、自信がついたら、それを mysql にパイプして戻すことができます。
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE
所属していません StackOverflow