113

すべてのプレフィックスを持つテーブルを削除するにはどうすればよいmyprefix_ですか?

注: phpMyAdmin で実行する必要があります

4

10 に答える 10

192

単一の MySQL コマンドだけでは実行できませんが、MySQL を使用してステートメントを作成できます。

MySQL シェルまたは PHPMyAdmin を使用して、次のクエリを使用します。

SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) 
    AS statement FROM information_schema.tables 
    WHERE table_name LIKE 'myprefix_%';

これにより、テーブルを削除するためにコピーして実行できる DROP ステートメントが生成されます。

編集:ここでの免責事項 - 上記で生成されたステートメントは、そのプレフィックスを持つすべてのデータベースのすべてのテーブルを削除します。特定のデータベースに制限する場合は、クエリを次のように変更し、database_name を独自の database_name に置き換えます。

SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' ) 
    AS statement FROM information_schema.tables 
    WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';
于 2009-10-19T15:20:36.627 に答える
41

以前の回答のいくつかは非常に良かったです。私は彼らのアイデアを、ウェブ上の他の回答からのいくつかの概念とまとめました.

「temp_」で始まるすべてのテーブルを削除する必要がありました。数回繰り返した後、次のコード ブロックを思いつきました。

-- Set up variable to delete ALL tables starting with 'temp_'
SET GROUP_CONCAT_MAX_LEN=10000;
SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME)
               FROM information_schema.TABLES
              WHERE TABLE_SCHEMA = 'my_database'
                AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ',  @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

これが他の MySQL/PHP プログラマーに役立つことを願っています。

于 2013-06-26T21:29:24.887 に答える
26
show tables like 'prefix_%';

結果をコピーしてテキスト エディターに貼り付けるか、クエリをファイルに出力し、いくつかの検索と置換を使用して不要な書式設定を削除し、末尾\nに a を置き、先頭にドロップ テーブルを追加します。;

次のようなものが得られます。

drop table myprefix_1, myprefix_2, myprefix_3;
于 2011-11-15T18:17:53.633 に答える
10

@andre-millerソリューションは優れていますが、すべてを一度に実行するのに役立つ、さらに優れた、もう少し専門的なソリューションがあります。それでも複数のコマンドが必要になりますが、このソリューションにより、自動ビルドに SQL を使用できるようになります。

SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME) 
    FROM information_schema.TABLES
    WHERE TABLE_NAME LIKE 'myprefix_%');
PREPARE stmt FROM 'DROP TABLE @tbls';
EXECUTE stmt USING @tbls;
DEALLOCATE PREPARE stmt;

注: このコードはプラットフォームに依存します。これは MySQL 用ですが、わずかな変更を加えるだけで Postgre、Oracle、および MS SQL 用に実装できることは確かです。

于 2012-09-22T19:22:33.670 に答える
6
SELECT CONCAT("DROP TABLE ", table_name, ";") 
FROM information_schema.tables
WHERE table_schema = "DATABASE_NAME" 
AND table_name LIKE "PREFIX_TABLE_NAME%";
于 2013-05-31T11:45:10.697 に答える
4

このように編集クエリでテーブルを正常に削除しました

SET GROUP_CONCAT_MAX_LEN=10000;
SET FOREIGN_KEY_CHECKS = 0;
SET @tbls = (SELECT GROUP_CONCAT(CONCAT('`', TABLE_NAME, '`'))
           FROM information_schema.TABLES
          WHERE TABLE_SCHEMA = 'pandora'
            AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ',  @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
于 2014-07-10T05:05:41.950 に答える
3

GROUP_CONCATを使用した別のソリューションで、DROP TABLE table1,table2,..のような 1 つのドロップ クエリが実行されます。

SET @Drop_Stm = CONCAT('DROP TABLE ', (
      SELECT GROUP_CONCAT(TABLE_NAME) AS All_Tables FROM information_schema.tables 
      WHERE TABLE_NAME LIKE 'prefix_%' AND TABLE_SCHEMA = 'database_name'
)); 
PREPARE Stm FROM @Drop_Stm; 
EXECUTE Stm;
DEALLOCATE PREPARE Stm;
于 2017-11-09T07:29:45.857 に答える
2

これは、MySQL を使用して 1 つのコマンドで実行できます。

drop table myprefix_1, myprefix_2, myprefix_3;

ただし、おそらくテーブル リストをコードで動的に作成する必要があります。

別のアプローチは、MySQL 5 の汎用ルーチン ライブラリを使用することです。

于 2009-10-19T15:17:44.993 に答える