MySQL批量删除表

overview

之前在工作中调试时建了一个每分钟执行一次的cron定时任务,每分钟均产生一个带时间信息的表名称,并忘了删除这个定时任务,待发现时已经有将近3000个新建的表了,由于单条单条地删除很慢,现需要批量删除这些带时间信息的表。

theory&&measure

theory

1 登陆mysql的information数据库,查找tables表,找出需要删除的表所在的数据库下的    所有符合时间要求的表名称

2 将查询出来的表名称拼接成drop table指令数据的形式,例如

drop table weekly_with_you_2014_12_28;

3 登陆到mysql的yc_market数据库,执行上一步输出的所有drop指令

measure

具体实现非常简单,只需要在linux终端敲入如下命令:

[[email protected] ~]$ echo "select concat(‘drop table ‘,  table_name ,‘;‘) from TABLES where TABLE_SCHEMA =‘yc_market‘ and table_name like ‘weekly_with_you_2014%‘ ;" | mysql -uroot -p123456 -h127.0.0.1 information_schema |
sed -n ‘2,$p‘ | mysql -uroot -p123456 -h127.0.0.1 yc_market

其中yc_marke是需要删除的表所在的数据库

sed命令用来跳过产生的所有的drop table指令中的第一行,因为第一行是无效的

时间: 2024-10-10 14:08:19

MySQL批量删除表的相关文章

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_%';"; $

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语句,再复

MYSQL批量创建表的存储过程

因为业务需要,创建了100个表,但是这些表的结构都是一样的,作为程序员,就是要解决这种重复劳动.然而这种事情还要单独写个php脚本的话太麻烦了吧,所以就干脆学了一下直接用Mysql存储过程怎么实现: 首先是创建表的:( LPAD(`@i`, 2, '0')的作用 是将1,2,3这些数字转化为'01','02','03') DROP PROCEDURE IF EXISTS `create_tables`; CREATE PROCEDURE create_tables () BEGIN DECLAR

mysql进阶 十五 mysql批量删除大量数据

mysql批量删除大量数据 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1 会发现删除失败,因为lock wait timeout exceed的错误. 因为这条语句所涉及的记录数太多,因此我们通过LIMIT参数分批删除,比如每10000条进行一次删除,那么我们可以利用 MySQL这样的语句来完成: DELETE FROM s

Mysql 批量删除前缀或者后缀表

oracl有drop table like 的用法,但是mysql没有,可以写脚本(不做赘述),也可以组装sql. 注意,我的数据库名字是test,有个表叫data,然后我准备四个有相同前缀的表,批量删除,准备数据可以用这条sql CREATE TABLE test_1201 SELECT * FROM `data`; CREATE TABLE test_1202 SELECT * FROM `data`; CREATE TABLE test_1203 SELECT * FROM `data`;

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

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

Mysql批量删除和修改某个前缀的表

1.批量删除某个前缀的表名,首先选出这些个表. select concat( 'drop table ', table_name, ';' ) from information_schema.tables Where table_name like 'dede_%'; 以上为删除date_为前缀的表,然后复制生成脚本运行即可完成删除. 2.修改某个前缀的表名 select concat( 'alter table ', table_name, 'rename to', table_name, '