「t1,b2 以外のテーブルを削除」のようなものを実装する MySQL コマンドはありますか?

StackOverflow https://stackoverflow.com/questions/1454328

  •  12-09-2019
  •  | 
  •  

質問

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データベースを返す。)

PREPAREEXECUTEを使用して、あなたもこれを実行するストアドプロシージャを作成(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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top