mysql通过执行sql删除指定数据库的所有表

原理: 通过存储过程遍历获取指定数据库的表名称,然后执行删除语句,删除完成后将删除该存储过程。
默认删除为当前使用的数据库,可在第一行SET @table_schema = null指定其他要删除的数据库。
请务必确保数据的可操作性,使用所带来的一切后果自负。

完整代码如下


SET @table_schema = null;  #指定当前要删除所有表的数据库名称,为null或''时默认为当前数据库,反之为指定的数据库

DROP PROCEDURE IF EXISTS dropAllTables;
##删除指定数据库的所有表##
CREATE PROCEDURE dropAllTables(in current_table_schema VARCHAR(255))
BEGIN  
    #current_table_schema为数据库名称
    DECLARE delete_text VARCHAR(255);  
    DECLARE delete_total INT; 
		
    ##创建接收游标数据的变量  
    DECLARE current_table_name VARCHAR(255);  

    #创建结束标志变量  
    DECLARE done INT DEFAULT false;  
    #创建游标  
    DECLARE cursor_index CURSOR FOR SELECT table_name FROM information_schema.tables 
    WHERE table_schema = current_table_schema;  
	
    #指定游标循环结束时的返回值  
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;  
    
    #设置初始值  
    SET delete_total = 0;
    SET delete_text = '删除执行完成';
		
    IF (current_table_schema is null or current_table_schema = "") THEN 
        SELECT database() INTO current_table_schema;
    END IF; 

    #打开游标  
    OPEN cursor_index;  
    #开始循环游标里的数据  
    read_loop:loop  
    #根据游标当前指向的一条数据  
    FETCH cursor_index INTO current_table_name;

    #判断游标的循环是否结束  
    IF done THEN  
        LEAVE read_loop;    #跳出游标循环  
    END IF;  
		
    #获取一条数据时,进行累加操作  
    SET delete_total = delete_total + 1;  
		
    #执行删除表操作
    SET @select_drop = CONCAT(' DROP TABLE IF EXISTS `', current_table_schema, "`.", current_table_name);
    PREPARE pr FROM @select_drop;
    EXECUTE pr; #执行pr
    DROP PREPARE pr; 
    SELECT @select_drop as drop_sql;
		
    #结束游标循环  
    END LOOP;  
    #关闭游标  
    CLOSE cursor_index;  
		
    IF (delete_total = 0) THEN 
        SET delete_text = '当前未删除任何表';
    END IF;

    SELECT current_table_schema as delete_database, delete_text, delete_total;  
END;
CALL dropAllTables(@table_schema);
DROP PROCEDURE IF EXISTS dropAllTables;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值