MYSQL如何批量删除相同前缀表?

分类:Mysql,问题集 | 作者:凹凸曼 | 发表于2011/06/10

最近再操作一些数据库的表时候,一些冗余的数据表,需要删除,但是删除表比较多,但是他们都相同的前缀,那怎样一键删除所有的(批量删除)呢?

下面写了两种办法进行处理

一、命令批量删除(需要列出所有要删除的表)

drop table `apoyl_table1`,`apoyl_table2`,`table3`
二、用程序(PHP)写一个小工具(一键搞定)
<html><head><title>MYSQL批量删除相同前缀的表</title></head>
<body>
<h2 style="text-align:center">MYSQL批量删除相同前缀的表</h2>
<br><br>
<form id="form1" name="form1" method="post" action="">
<table width="500" border="0" align="center" >
    <td width="110">ip地址</td>
    <td width="500" height="26"><label>
      <input name="ip" type="text" id="ip" value="localhost" />
    </label></td>
  </tr>
  <tr>
    <td height="25">数据库账号</td>
    <td height="26"><label>
      <input type="text" name="user" id="user" />
    </label></td>
  </tr>
  <tr>
    <td>数据库密码</td>
    <td height="26"><label>
      <input type="text" name="pwd" id="pwd" />
    </label></td>
  </tr>
  <tr>
    <td>数据库</td>
    <td height="26"><label>
      <input type="text" name="dbname" id="dbname" />
    </label></td>
  </tr>
  <tr>
    <td>删除前缀</td>
    <td height="26">    <label>
      <input type="text" name="pre" id="pre" />
     (例如:apoyl_)</td>
  </tr>
    <tr>
    <td height="67" colspan="2" align="center">    <label>
      <input type="submit" name="apoyl" id="apoyl" value="删除" n />
  </label><a href=http://www.apoyl.com/?p=871 target="_blank" >帮助</a></td>
    </tr>

</table>
</form>
</body>
</html>
<?php
    /*  author:凹凸曼(LYC)
    /*  email: jar-c@163.com
    /*  url  : http://www.apoyl.com/
    */
if($_POST['apoyl']){
  //参数获取及过滤
 $params=array();
   foreach($_POST as $k=>$v){
    if(in_array($k,array('ip','user','pwd','dbname','pre'))){
  $params[$k]=addslashes(trim($v));
  if(empty($params[$k])){
     echo '参数为空!';
     exit;
   }
    }
   }
  //连接数据库
  $conn=@mysql_connect($params['ip'],$params['user'],$params['pwd']) or die('数据连接失败');
  mysql_select_db($params['dbname'],$conn);
  //获取该数据所有表
  $rs=mysql_query('show tables',$conn);
  while($arr=mysql_fetch_array($rs)){
   //判断是否为该前缀的表
      $flag=strpos($arr[0],$params['pre']);
   if($flag===0){
    $re=mysql_query('drop table    '.$arr[0],$conn);
     if($re){
          echo '<strong>'.$arr[0].'</strong> 删除成功!<br/>';
         }else{

      echo '<strong>'.$arr[0].'</strong><font color=red> 删除失败!</font><br/>';
      }
   }
  }
}
?>

结:第一种方式与第二区别 更麻烦需要写出所有的表名,而第二种方式,更为简单,

但是只能删除相同前缀的表名
本文出自 “凹凸曼” 博客,请务必保留此出处 http://www.apoyl.com/?p=871

日志信息 »

该日志于2011-06-10 03:13由 凹凸曼 发表在Mysql, 问题集分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (0)层:

发表评论 »

« »