用SQL生成SQL

    遇到需要批量删除数据中的表的问题,二十来个表,手写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_CONSTRAINTS 表中,也可以生成删除外键的语句
    
     “ 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不熟悉,才开始学习,以后补上。

一、简介 1.1前言 1、由于最近工作一直用Oracle,故对Oracle数据库研究为对象。 2、根据工作业务需求实际情况进行功能研发。为什么要开发呢?因为在数据库升级或者迁移的时候,为了保证不同环境不同数据库数据保持同步,故数据库SQL脚本非常作用。比如:数据库主脚本,副脚本,增量脚本。 3、 什么是主脚本、副脚本、增量脚本呢? 3.1、主脚本指数据库表或存储过程,视图脚本,序列等脚本。 3.2、副脚本指必须执行主脚本之后才执行的脚本。换句话说在没执行主键脚本的情况下,副脚本执行之后会回滚事务失败。 3.3、增量脚本指在执行主脚本或副脚本之后,根据需求对某个表添加/修改约束(主外键约束,长度约束等),添加/修改字段/添加数据等情况对数据库结构改变处理的一种行为脚本。 1.2作用 1、 快速产出自定义规则需要的SQL脚本。 2、减少人工编写SQL脚本出错率问题,完全通过程序检测SQL准确性。 3、帮助开发人员提高SQL编写效率,减少人工编写SQL开发成本问题。 4、帮助开发人员节约时间,同时避免繁琐不必要编写SQL的工作。 二、实现方式与原理 2.1实现方式 1、实现方式分:正向与逆向实现。什么是正向与逆行呢【是否有鸡还是有蛋,先后道理同等】 2、正向方式:首先把设计好数据库表文档,把所有表的字段属性配置到EXCEL或者CSV格式的文件通过JXL/POI技术去读取文件的字段,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 3、逆向方式:首先有数据库表,然后通过ORM持久化技术连接数据库再读取表的字段等属性出来,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 2.2原理 对数据库软件内置核心表或视图查询出来存储用户行为表结构所有属性信息,对此属性结构信息进行分析与组装所需要SQL脚本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值