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中
drop.sqlの内容は似ています.
次に、削除スクリプト:mysql>source c:/dropを実行します.sql上記の例のテーブル間にプライマリ外部キー制約がなければ直接削除できますが、プライマリ外部キー制約がある場合は、先に削除して外部キー制約を削除できます.Mysqlの制約情報はinformation_schema.TABLE_CONTRAINTSテーブルでは、外部キーを削除する文「alter table tablename drop foreign key foreign-key-name;たとえば、JBPMのテーブルには多くの外部キー制約があり、次のSQLでJBPMデータベース内のすべての外部キーを削除できます.
以上のSQLを実行すると、外部キーを削除するスクリプトdrop_を生成できます.fk.sqlは、削除テーブルのスクリプトを再生成します.
削除を実行:
Oracleで使用可能
select 'DROP TABLE' || table_name || ';' from user_tables;
削除テーブルのスクリプトの生成
oracleはよく知らないので、勉強を始めて、後で補充します.
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はよく知らないので、勉強を始めて、後で補充します.