2

t1、t2を保持し、他のすべてのテーブルを削除したいと思います。

4

2 に答える 2

7

を使用してテーブル名を検索したり、結果を一連のステートメント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以降では)これを行うためのストアドプロシージャを作成できます。

于 2009-09-21T12:59:10.143 に答える
1

mysqldumpを使用して、DROP TABLEステートメントのリストを生成し、不要なステートメントをフィルターで除外してから、それをmysqlクライアントにパイプで戻すことができます。これが私たちがそれを構築する方法です

まず、データベースのDROPTABLEテーブルステートメントのリストを次に示します。

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP 

これで、grepを介して-vを使用して一致を反転できます。保持しているテーブルについて言及していないステートメントが必要です(これを行う別の方法は、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
于 2009-09-21T13:00:45.660 に答える