3

約 20k テーブルを削除する必要があります。ドロップしてはならないテーブルの名前を知っています。

テーブル名が「a、b、c、d、e、f、g...」の場合、リスト「a、b、c」にないすべてのテーブルを削除するにはどうすればよいですか?

4

7 に答える 7

3

これでリストを取得できます

SELECT CONCAT("DROP TABLE ", table_name, ";") 
FROM information_schema.TABLES 
WHERE table_schema = <whatever your db name is> 
AND table_name NOT IN (<your list>);

次に、コピーして貼り付けます!

于 2011-05-03T20:35:31.467 に答える
2

次のアプローチを取ることをお勧めします

  • SHOW TABLESを使用して(または からinformation_schema.TABLES) 、すべてのテーブルの完全なリストを 1 行に 1 つずつ抽出します。
  • テキストエディタでリストを開く
  • リストから削除したくないテーブルを削除します
  • マクロまたは検索/置換を使用して、各行をDROP TABLEコマンドに変換します

これで、データベースに対して実行できる SQL スクリプトができました

あなたが Linux シェルの忍者ならuniqxargs、 などのコマンドライン ツールを使用してファイルを操作することをお勧めします。スプレッドシートを使用することは、それに対処する別の方法かもしれません。

于 2011-05-03T20:32:42.053 に答える
2

これを試して、SQL DROP ステートメントの結果セットを取得します。

SELECT CONCAT('DROP TABLE ', TABLE_NAME , ';')
FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_SCHEMA='YourDatabase'
AND TABLE_NAME NOT IN ('Table1', 'Table2');

結果をコピーして貼り付けると、20,000 -n 個のDROP ステートメントが得られます。

于 2011-05-03T20:35:23.257 に答える
1

select from information_schema.tables を実行し、結果を反復して適切なドロップを実行するカーソルを作成する必要があります (if ステートメントを使用)。これは、drop ステートメントが選択/フィルタリングまたはその他のオプションをサポートしていないためです。(ここ2、3年で何かが変わった場合を除く)

select ステートメントを実行しているときは、次のようなものを使用できます。

WHERE table_name NOT IN ('ssss','dddd');

もう 1 つは、なぜデータベースに 2 万個のテーブルがあるのですか?????

于 2011-05-03T20:31:59.897 に答える
0

今日、まったく同じ問題に遭遇しました。テーブル ABC、DEF、および XYZ をスキップするための 1 つの方法を次に示します。

mysql -Nu USER --password=PASSWORD DATABASE -e 'show tables' | \
perl -ne 'BEGIN { print "SET FOREIGN_KEY_CHECKS=0;\n" };
    !/^(ABC|DEF|XYZ)$/ && s/^(.*)/DROP TABLE `\1`;/ && print' | \
mysql -u USER --password=PASSWORD DATABASE

それで、悪魔とは何ですか?

  1. 最初の mysql 呼び出しは、ヘッダー行なしですべてのテーブルを取得します (-N オプション)
  2. mysql の出力は Perl にパイプされます。
  3. Perl スクリプトは、テーブルを削除しているため、外部キー チェックをスキップする最初の行を追加します。
  4. 次に、スクリプトは各テーブルに DROP TABLE X を追加し、テーブル ABC、DEF、および XYZ をスキップします。
  5. Perl からの出力は mysql に送られ、同じデータベースが変更されます
于 2015-10-01T18:44:55.993 に答える
0

短期間使用不可にしたいテーブルを回避できる場合は、まったく異なるアプローチを提案します。

  • 保持したいテーブルをバックアップする
  • DROP DATABASEすべてのテーブルを含むデータベース
  • 保持したいテーブルをバックアップから復元します
于 2011-05-03T20:34:22.943 に答える