加入收藏 | 设为首页 | 会员中心 | 我要投稿 航空爱好网 (https://www.ikongjun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql批量删除数据库

发布时间:2022-10-08 15:57:56 所属栏目:MySql教程 来源:
导读:  前言

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

  drop database DBName;

  将上述命令中的DBName换成要删除的数据库的名字,就可以直接删除对应的数据库。
  前言
 
  删除数据库的命令对于有点数据库操作经验的人应该不会陌生,命令结构如下:
 
  drop database DBName;
 
  将上述命令中的DBName换成要删除的数据库的名字,就可以直接删除对应的数据库。但是有时候我们会出现这种困扰,就是测试的数据库一大堆,想要把它们都删掉时,采用一个个删除的方式有很浪费时间,有没有类似于like语句的模糊删除呢?很抱歉,在Mysql上我至今还没有找到,我们可能很想写出一下这种语句,drop database like '%test%';但是这句话是有语法错误的,我们只能采取其他的方式来达到我们的目的,既然sql的存储过程可以自定义操作逻辑,所以我们就拿它来开刀。
 
  实现
 
  本篇文章是针对于有一定数据库操作经验的人,而又不会批量删除数据库而写的,要想实现批量删除数据库MySQL 删除数据表,最起码要能分清哪些是数据库的命令行工具,知道在哪个界面输入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
  其中存储过程的参数有两个,分别是paramDBNamePrefix和paramDBNameSuffix表示待删除数据库的前缀和后缀,这两个参数会组成一个字符串’%paramDBNamePrefix%paramDBNameSuffix%’用作模糊查询的条件,比如两个参数分别是’test’和’10’的话,就会删除形如”%test%”的数据库,即数据库’test10’、’test101’、’test102’等等数据库都会删除。
 
  示例
 
  首先在test数据库中创建上述存储过程,创建成功后在数据库命令行工具中输入显示数据库命令:
 
 
 
  批量删除之前查询数据库
 
  根据上述查询结果,假设我们要删除前4个自己创建的测试数据库,我们可以像下面这样执行命令:
 
  call drop_databases(‘21test’, ‘11’);
 
  执行过程显示如下:
 
  批量删除过程中
 
  我们再次查看一下数据库,结果如下:
 
 
 
  根据结果可知,我们自定义的前四个数据库确实批量删除了!
 
  总结
 
  或许有更简便的方式来批量删除数据库,只是我还没有发现,欢迎大家给出更好的方式,我们来共同提高。
 

(编辑:航空爱好网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!