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

分类:Mysql,问题集 | 作者:凹凸曼 | 发表于2011/06/10 MYSQL如何批量删除相同前缀表?已关闭评论

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

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

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

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, 问题集分类下, 评论已关闭。

目前盖楼

抱歉,评论被关闭

« »