查看: 7926|回复: 2

[笔记] 批量删除 MySQL中的表。

[复制链接]
论坛徽章:
19
授权会员
日期:2005-10-30 17:05:33马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36
跳转到指定楼层
1#
发表于 2006-1-25 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题:要一次性删除MySQL中多个具有某种规则的表,有没有什么技巧?

答:
echo "select concat('drop table ',  table_name ,';') from TABLES where TABLE_SCHEMA ='wap' and table_name like '%2006%' ;" | mysql information_schema | sed -n '2,$p' | mysql wap

解析:
我要删除:
drop table WAPNEWS_ISDNLOG_20060101;
drop table WAPNEWS_ISDNLOG_20060102;
drop table WAPNEWS_ISDNLOG_20060103;
drop table WAPNEWS_ISDNLOG_20060104;
drop table WAPNEWS_ISDNLOG_20060105;
drop table WAPNEWS_ISDNLOG_20060106;
drop table WAPNEWS_ISDNLOG_20060107;
drop table WAPNEWS_ISDNLOG_20060108;
drop table WAPNEWS_ISDNLOG_20060109;
drop table WAPNEWS_ISDNLOG_20060110;
drop table WAPNEWS_ISDNLOG_20060111;
drop table WAPNEWS_ISDNLOG_20060112;
drop table WAPNEWS_ISDNLOG_20060113;
drop table WAPNEWS_ISDNLOG_20060114;
drop table WAPNEWS_ISDNLOG_20060115;
这些表,如果手工写太麻烦,所以采用此脚本一次执行完成了。

1.information_schema数据库是MySQL的信息库,用于管理MySQL其他数据库中表,存储过程,索引等的定义和状态的,其中TABLES表是用来描述表结构信息的,结构如下:
[PHP]
mysql> desc TABLES;
+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(1024) | YES  |     | NULL    |       |
| TABLE_SCHEMA    | varchar(64)   | NO   |     |         |       |
| TABLE_NAME      | varchar(64)   | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)   | NO   |     |         |       |
| ENGINE          | varchar(64)   | YES  |     | NULL    |       |
| VERSION         | bigint(21)    | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)   | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21)    | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21)    | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21)    | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21)    | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21)    | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21)    | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21)    | YES  |     | NULL    |       |
| CREATE_TIME     | datetime      | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime      | YES  |     | NULL    |       |
| CHECK_TIME      | datetime      | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(64)   | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21)    | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)  | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(80)   | NO   |     |         |       |
+-----------------+---------------+------+-----+---------+-------+
21 rows in set (0.00 sec)
[/PHP]

2.利用concat来构造sql语句。

3.sed -n '2,$p' 的作用是跳过第一行。因为echo "select ..." | mysql information_schema会带一个头,利用sed跳过一行,从第二行开始输出。

4.把输出的sql语句传递回mysql wap,这样就会针对于wap数据库逐条执行drop table操作。
论坛徽章:
47
马上加薪
日期:2014-02-19 11:55:142011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:012010新春纪念徽章
日期:2010-03-01 11:20:512010年世界杯参赛球队:日本
日期:2010-02-26 11:04:222010新春纪念徽章
日期:2010-01-04 08:33:08祖国60周年纪念徽章
日期:2009-10-09 08:28:00生肖徽章2007版:牛
日期:2009-09-10 11:14:59
2#
发表于 2006-2-2 13:03 | 只看该作者

用php标记使表格对齐

[PHP]mysql> desc TABLES;
+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(1024) | YES  |     | NULL    |       |
| TABLE_SCHEMA    | varchar(64)   | NO   |     |         |       |
| TABLE_NAME      | varchar(64)   | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)   | NO   |     |         |       |
| ENGINE          | varchar(64)   | YES  |     | NULL    |       |
| VERSION         | bigint(21)    | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)   | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21)    | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21)    | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21)    | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21)    | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21)    | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21)    | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21)    | YES  |     | NULL    |       |
| CREATE_TIME     | datetime      | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime      | YES  |     | NULL    |       |
| CHECK_TIME      | datetime      | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(64)   | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21)    | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)  | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(80)   | NO   |     |         |       |
+-----------------+---------------+------+-----+---------+-------+
21 rows in set (0.00 sec)

[/PHP]

使用道具 举报

回复
论坛徽章:
19
授权会员
日期:2005-10-30 17:05:33马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36
3#
 楼主| 发表于 2006-2-7 13:56 | 只看该作者
谢谢,我改了,:)

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表