1

データベース内のほぼすべてのテーブル (合計 9000) を削除したいと考えています。なぜそんなに多く、長すぎて説明できないのか、私に聞かないでください。

したがって、削除したくないテーブルが3つあります。

これを行うためにどの SQL ステートメントを使用できますか? 私はしばらくの間グーグルをしてきましたが、何も出てきませんでした!

だから私は(PHPで)このようなことを念頭に置いています:

foreach($tab as $tableList){
if($tab!='foo'&&$tab!='bar'&&$tab!='foofoobar')
mysql_query('DROP TABLE '.$tab);
}

何か案は?すべてが mysql ステートメントになればさらに良いでしょう!

4

3 に答える 3

3
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'db_name'

データベース「db_name」のすべてのテーブルが表示されます。

ステートメントを実行する前に、テーブルをバックアップすることを忘れないでくださいDROP

PHP を使用して、次のような DROP ステートメントまたは動的 SQL を実行できます。

(この質問からコピー: Deleting-dynamically-managed-tables-in-mysql )

SET @v = ( SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(it.table_name) )
           FROM information_schema.tables it 
           WHERE it.table_name NOT IN ('TableToKeep_1', 'Keep_2', 'Keep_3')
             AND it.table_schema = 'db_name' ;
         ) ;
PREPARE stDropTables FROM @v; 
EXECUTE stDropTables ;
于 2011-07-07T00:08:15.500 に答える
2

コンマを使用して、一度に複数のテーブルを削除できます。

     DROP TABLE table_1, table_2, etc;
于 2011-07-06T23:47:39.477 に答える
2

あなたのPHPコードから、ORANDを使用しないでください...

foreach($tab as $tableList){
if($tab!='foo'|| $tab!='bar' || $tab!='3rdtablename')
mysql_query('DROP TABLE '.$tab);
}

明らかな理由で。

MySQL 内で実行したい場合は、

最初にすべてのテーブルをリストすることができます...使用して

show tables > whateverfile.txt

ファイルに保存...必要に応じてファイルを編集...つまり、削除してはならないテーブルの名前を削除しDROP TABLEてファイルの最初の行に追加し、MysQL内で実行します... mysql < whateverfile.txt....

于 2011-07-06T23:55:12.923 に答える