因为在自测过程中,创建了很多数据库,一个个手动删除属实有点对不起程序员这个身份,那么有没有简单的sql语句操作来进行批量删除数据库呢?于是便有了本篇文章
上面图片是AI创作,未经允许,不可商用哦!
目录
前情提示
删库跑路需谨慎,
放弃一切亦不易。
思路
了解到数据库或表的信息都保存在MySQL内置的 information_schema数据库的SCHEMATA表中,因此是否可以通过like查询information_schema中的相关表名,拼接SQL,进行批量删除。
实操 批量删除数据库(以前缀为 ‘test_’ 示例)
SELECT CONCAT( 'DROP DATABASE ', SCHEMA_NAME, ';')
FROM information_schema.SCHEMATA
WHERE information_schema.SCHEMATA.SCHEMA_NAME LIKE 'test_%';
如下图,查询结果是拼接好的sql,CV一下,执行即可
批量删除表(以前缀为 ‘df_’ 示例)
SELECT CONCAT( 'DROP TABLE ', TABLE_NAME, ';')
FROM information_schema.TABLES
WHERE information_schema.TABLES.TABLE_NAME LIKE 'df_%';
如下图,同样查询结果是拼接好的sql,CV一下,执行即可
到这里已经实现了批量删除操作,下面是引发的探究,如时间紧张可先赞后看,保持良好习惯!
MySQL 5.7 自带的四个数据库
在Mysql5.7版本中自带4个数据库:information_schema、mysql、performance_schema、sys。
mysql
mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。(常用的如在mysql.user表中修改root用户的密码)
performance_schema
主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。MySQL5.7默认是开启的。
sys
sys库所有的数据源来自:performance_schema。目标是把performance_schema的复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况。
information_schema
提供了访问数据库元数据的方式。(元数据是关于数据的数据,如数据库名、表名、列的数据类型和访问权限等。有时用于表述该信息的其他术语包括“数据词典”和“系统目录”) 该位置存储有关MySQL服务器维护的所有其他数据库的信息。
information_schema数据库表简介
该INFORMATION_SCHEMA数据库包含几个只读表。它们实际上是视图,而不是基表,因此没有与它们关联的文件,并且不能在它们上设置触发器。另外,没有使用该名称的数据库目录。虽然你可以选择INFORMATION_SCHEMA与一个默认的数据库USE 语句,你只能读取表的内容,不能执行 INSERT、UPDATE或 DELETE。
对于大多数INFORMATION_SCHEMA表,每个MySQL用户都有权访问它们,但只能看到表中与用户具有适当访问权限的对象相对应的行。在某些情况下(例如,表中的ROUTINE_DEFINITION列 INFORMATION_SCHEMA ROUTINES),特权不足的用户会看到NULL。某些表具有不同的特权要求;为此,在适用的表格说明中提到了这些要求。例如,InnoDB表(名称以开头的表INNODB_)需要PROCESS特权。
分表
information_schema库共计有61张表。下面仅以批量删除数据库和表涉及到分表展开简单介绍
SCHEMATA表
模式是数据库,因此 SCHEMATA表提供了有关数据库的信息。该SCHEMATA表包含以下列:
模式名称也可以从该SHOW DATABASES语句中获得:
mysql> show databases like ‘mysql’;
±-----------------+
| Database (mysql) |
±-----------------+
| mysql |
±-----------------+
1 row in set (0.00 sec)
————————————————
TABLES表
该TABLES表提供有关数据库中表的信息。该TABLES表包含以下列:
参考
MySQL之自带四库之information_schema库