当前位置: 首页 > news >正文

Mysql批量删除数据库

前言

删除数据库的命令对于有点数据库操作经验的人应该不会陌生,命令结构如下:

drop database DBName;

将上述命令中的DBName换成要删除的数据库的名字,就可以直接删除对应的数据库。但是有时候我们会出现这种困扰,就是测试的数据库一大堆,想要把它们都删掉时,采用一个个删除的方式有很浪费时间,有没有类似于like语句的模糊删除呢?很抱歉,在Mysql上我至今还没有找到,我们可能很想写出一下这种语句,drop database like '%test%';但是这句话是有语法错误的,我们只能采取其他的方式来达到我们的目的,既然sql的存储过程可以自定义操作逻辑,所以我们就拿它来开刀。

实现

本篇文章是针对于有一定数据库操作经验的人,而又不会批量删除数据库而写的,要想实现批量删除数据库,最起码要能分清哪些是数据库的命令行工具,知道在哪个界面输入sql命令等等,所以如果你拿到批量删除数据库的存储过程的源码,还是不知道如何入手的话,你可以给我留言,我会提供尽可能的帮助,那么接下来就是存储过程的源码

DROP PROCEDURE IF EXISTS drop_databases;
CREATE PROCEDURE drop_databases(
    IN paramDBNamePrefix VARCHAR(32),
    IN paramDBNameSuffix VARCHAR(32)
)
BEGIN
    DECLARE _done INT DEFAULT 0;
    DECLARE _cursorValue VARCHAR(255);

    DECLARE _cursor CURSOR FOR SELECT SCHEMA_NAME FROM information_schema.SCHEMATA 
        WHERE SCHEMA_NAME LIKE @_paramDBName;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = 1;

    SET @_paramDBName = CONCAT("%", paramDBNamePrefix, "%", paramDBNameSuffix, "%");
    

    OPEN _cursor;
    REPEAT
        FETCH _cursor INTO _cursorValue;
        IF (_done <> 1) THEN
            SET @prepareStatement = CONCAT("DROP DATABASE ", _cursorValue);
            SELECT @prepareStatement;
            PREPARE stmt FROM @prepareStatement;
            EXECUTE stmt ;
            DEALLOCATE PREPARE stmt;
        END IF;
    UNTIL _done = 1 end REPEAT;
    CLOSE _cursor;
 END

其中存储过程的参数有两个,分别是paramDBNamePrefixparamDBNameSuffix表示待删除数据库的前缀和后缀,这两个参数会组成一个字符串’%paramDBNamePrefix%paramDBNameSuffix%’用作模糊查询的条件,比如两个参数分别是’test’和’10’的话,就会删除形如”%test%10%”的数据库,即数据库’test10’、’test101’、’test102’等等数据库都会删除。

示例

首先在test数据库中创建上述存储过程,创建成功后在数据库命令行工具中输入显示数据库命令:

show databases

显示如下图:


批量删除之前查询数据库

根据上述查询结果,假设我们要删除前4个自己创建的测试数据库,我们可以像下面这样执行命令:

call drop_databases(‘21test’, ‘11’);

执行过程显示如下:


批量删除过程中

我们再次查看一下数据库,结果如下:


这里写图片描述

根据结果可知,我们自定义的前四个数据库确实批量删除了!

总结

或许有更简便的方式来批量删除数据库,只是我还没有发现,欢迎大家给出更好的方式,我们来共同提高。

相关文章:

  • UE4中的反射机制
  • 排序算法系列之(一)——选择排序清新脱俗的一面
  • C++11(一):在类的定义时初始化非静态变量
  • C++11(二):lamda表达式
  • 可能错误使用了‘offsetof’宏
  • 警告:对 NULL 对象非静态数据成员‘XXX::xxx’的访问无效
  • git tag常用操作
  • error: SEH exception with code 0xc0000005 thrown in the test
  • new对象数组是否会调用对象的构造函数
  • const究竟限制了谁的改变
  • CSDN 论坛板块升级规则
  • poj解题报告——序
  • UE4编辑器修改界面显示语言
  • poj解题报告——poj 2028 When Can We Meet?
  • poj解题报告——poj 1493 Machined Surfaces
  • [deviceone开发]-do_Webview的基本示例
  • [数据结构]链表的实现在PHP中
  • 《深入 React 技术栈》
  • android 一些 utils
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CentOS7简单部署NFS
  • CSS中外联样式表代表的含义
  • ES6--对象的扩展
  • Javascript 原型链
  • JS题目及答案整理
  • Markdown 语法简单说明
  • Node 版本管理
  • quasar-framework cnodejs社区
  • React的组件模式
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Terraform入门 - 3. 变更基础设施
  • VUE es6技巧写法(持续更新中~~~)
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 马上搞懂 GeoJSON
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 项目实战-Api的解决方案
  • 阿里云服务器购买完整流程
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • (1)Android开发优化---------UI优化
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (八)Spring源码解析:Spring MVC
  • (力扣)循环队列的实现与详解(C语言)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (四)Linux Shell编程——输入输出重定向
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)母版页和相对路径
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • ./configure,make,make install的作用
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?