MySQL根据正则表达式批量删除表

最近在维护一个wordpress商城项目,商城是多站的,会为独立的站创建出几张表。项目在测试服务器上,貌似是被爬虫恶意注册,产生了几千个用户,就产生了几万张表,导致数据库导入导出都像蜗牛一样,慢得要死,所以就只能上服务器执行SQL删除了,先暂时关闭了注册的功能,由于注册貌似没有验证的条件造成的,然后就写了几条SQL语句删除这几万张多余的表。

首先用SSH登录了服务器,登录mysql数据库:

mysql -uroot -proot

注:-u 后面为你的数据库用户名    -p后面为你的数据库密码

然后生成根据正则表达式删除表的sql语句并保存:

select CONCAT( ‘drop table ‘, table_name, ‘;‘ )  FROM information_schema.tables

where table_name REGEXP ‘ss_[0-9]{3,}..‘  into outfile ‘del.sql‘;;

注:REGEXP 后面跟的是需要删除表名的正则表达式

这里有一些常用的MySQL正则表达式规则:

逻辑或: select * from s_user where name REGEXP ‘a|b|c‘

特定字符字符:    select * from s_user where name REGEXP ‘[abc]123‘

匹配范围:        [0-9]  [a-z]

重复元字符:      * 零个或多个

+ 一个或多个

? 零个或一个

{n} 指定次数

{n,m}指定次数范围

{n,} 指定次数范围以上

定位元字符:       ^行首

$行尾

任意多个字符:     ..

....更具体的匹配规则可以google一下

这里的SQL文件默认是导入到了/var/lib/mysql/del.sql这里

然后我们在执行del.sql里面的命令就可以了,如果不放心的话,可以使用vi打开del.sql看一下里面的内容:

执行:        source del.sql

时间: 2024-10-22 21:59:01

MySQL根据正则表达式批量删除表的相关文章

Mysql MyISAM数据库批量转换表引擎为Innodb

Mysql MyISAM数据库批量转换表引擎为Innodb 最近在做事物处理需要把表结构都改为带有支持事物的Innodb引擎格式, 把里面数据库 用户名.密码 等信息修改为你自己的,放在网站下运行即可.如果想把Innodb改为MyISAM修改里面的  engine='InnoDB'  部分代码. <?php /** * User: Yt * Date: 2016/2/25 0025 */ //连接数据库 $host='localhost'; $user='root'; //数据库用户名 $pas

MySQL批量删除表

overview 之前在工作中调试时建了一个每分钟执行一次的cron定时任务,每分钟均产生一个带时间信息的表名称,并忘了删除这个定时任务,待发现时已经有将近3000个新建的表了,由于单条单条地删除很慢,现需要批量删除这些带时间信息的表. theory&&measure theory 1 登陆mysql的information数据库,查找tables表,找出需要删除的表所在的数据库下的    所有符合时间要求的表名称 2 将查询出来的表名称拼接成drop table指令数据的形式,例如 dr

mysql批量删除表数据

2015-09-23 #delete_table_data.sh#批量删除mysql库中表数据 #!/bin/bash ### AUTHOR: Leo ### DATE: 2015/09/23 ### REV: 1.0 echo -e "Input the dbname you want to use: \c" read db mysql -uroot -ppro#pateo -e "use $db;show tables;"|grep -v Tables>t

mysql 批量删除表

<?php set_time_limit(0); $con = mysql_connect("localhost", "user", "pwd"); $dbname = "db"; if ($con) { if (mysql_select_db($dbname, $con)) { $sql = "SHOW TABLES WHERE Tables_in_$dbname LIKE 'prd_%';"; $

Greenplum(PostgreSql)函数实现批量删除表

项目做库迁移,前期需要经常调整表结构语句,涉及多次的批量drop,本着偷懒精神写了这个函数.鉴于本函数在生产环境有巨大风险,建议测试完毕后立即删除. 主要步骤很简单:1)从pg_tables查询得到相关表名称:2)遍历查询结果拼接动态语句然后循环执行. 代码: create or replace function vppp.func_drop_tables() returns void as $body$ -- 注意schema名称 declare tmp varchar(512); -- 存放

sql - 批量删除表

今天帮朋友做点数据,其中因为原始数据的第一步处理需求变了,所以基本上过程中,除了原始数据,其他所有表都没有用了,但是sql Server又不允许同时选多个表进行删除操作. 我的需求是,除了表t_init之外,都要删除,sql 代码为: /****** Script for SelectTopNRows command from SSMS ******/ use RainFactor; DECLARE @Table NVARCHAR(30) DECLARE tmpCur CURSOR FOR SE

批量删除表

DECLARE @Table NVARCHAR(30)DECLARE tmpCur CURSOR FOR SELECT name FROM sys.objects WHERE TYPE='U' AND name LIKE N'HSUPA%'OPEN tmpCur FETCH NEXT FROM tmpCur INTO @Table WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @sql VARCHAR(100) SELECT @sql = 'drop table

mysql批量删除指定前缀或后缀表

今天突然发现我们数据库中多出很多表,后缀名为"copy",预计是navicat直接拷贝导致的,然后要对这些有同样后缀名的表进行删除,假设一个一个选择会非常麻烦,表计较多,在网上找了找方法,网上主要通过sql语句来删除.自己在他的基础上写了一个php文件实现了批量删除表.事实上原理是一样的. 1.MYSQL批量删除 [1]获得批量删除的命令: Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.t

MYSQL批量修改表前缀与表名sql语句

修改表名 ALTER TABLE 原表名 RENAME TO 新表名; 一句SQL语句只能修改一张表 show tables; 1. SELECT CONCAT( 'ALTER TABLE ', table_name, ' RENAME TO db_', substring(table_name, 4), ';' ) FROM information_schema. TABLES WHERE table_name LIKE 'ct%'; 批量复制一下到Notepad++中,只保留sql语句,再复