SQLでSQLを生成


データの中のテーブルを大量に削除する必要があるという問題に直面して、20数本のテーブル、手書きDROP TABLEは面倒で、今多くのフロントエンドツールが似たような機能を持っていますが、N回のマウスをクリックしてから完成する必要があります.外部キーがあればもっと面倒です.Pythonなどのスクリプトで済ませることができますが、一番簡単なのはSQLでDROP TABLE文を生成し、ここで共有したいと思います.SQL生所DROP TABLE文の考え方は、SELECT文からテーブル名を得ることができれば、以下に必要な削除スクリプトselect concat('DROP TABLE',tablename)fromを得ることができるということです.MySQLでのinformation_schema.tablesではすべてのテーブル名が得られ、そこにデータベース条件を加えることで、操作するデータベースのすべてのテーブルshow tablesも現在のデータベースのすべてのテーブルを得ることができますが、selectでは使用できません.知っているなら、教えてください.次の文はtestライブラリ内のすべてのテーブルを削除するスクリプトを生成し、c:/dropに保存します.sql中
mysql>SELECT  
                      CONCAT('drop table ', table_name,';')  
                      INTO OUTFILE 'c:/drop.sql' 
            FROM 
                     information_schema.tables s 
            WHERE 
                     s.TABLE_SCHEMA='test';


 
drop.sqlの内容は似ています.
 
    drop table b;
    drop table c;
    drop table m;


 
次に、削除スクリプト:mysql>source c:/dropを実行します.sql上記の例のテーブル間にプライマリ外部キー制約がなければ直接削除できますが、プライマリ外部キー制約がある場合は、先に削除して外部キー制約を削除できます.Mysqlの制約情報はinformation_schema.TABLE_CONTRAINTSテーブルでは、外部キーを削除する文「alter table tablename drop foreign key foreign-key-name;たとえば、JBPMのテーブルには多くの外部キー制約があり、次のSQLでJBPMデータベース内のすべての外部キーを削除できます.
SELECT
    CONCAT('alter table ',fk.TABLE_NAME, ' drop foreign key ', fk.CONSTRAINT_NAME,';')
FROM
    information_schema.TABLE_CONSTRAINTS fk
WHERE
    fk.CONSTRAINT_SCHEMA='JBPM' AND fk.CONSTRAINT_TYPE='foreign key';



 
以上のSQLを実行すると、外部キーを削除するスクリプトdrop_を生成できます.fk.sqlは、削除テーブルのスクリプトを再生成します.
SELECT
    CONCAT('drop table ',t.TABLE_NAME,';')
    INTO OUTFILE 'c:/drop.sql'
FROM
    information_schema.TABLES t
WHERE t.table_schema='jbpm'; 


 
削除を実行:
SQL> source c:/drop_fk.slq
SQL> source c:/drop.sql


 
Oracleで使用可能
    
select 'DROP TABLE' || table_name || ';' from user_tables;
削除テーブルのスクリプトの生成
 
oracleはよく知らないので、勉強を始めて、後で補充します.