美文网首页
MySQL批量删除数据表

MySQL批量删除数据表

作者: yandaxin | 来源:发表于2020-05-13 01:46 被阅读0次

    当我想批量删除有共同前缀的数据表时,我发现MySQL的drop table 并不支持批量操作,我豪横的sql均有syntax error。

    1. drop tables in 
    (select table_name 
    from information_schema.tables
     where table_name like 'test%' and table_schema='db_name'
    );
    
    2.drop table like 'test%';
    
    !错误示范,请勿模仿!模仿了也没事!
    

    既然如此,把循环的事情交给shell做,MySQL每次还是drop一张表,脚本如下,
    sh deltbbydbandprefix.sh db_name tb_prefix运行。

    #! /bin/bash
    # deltbbydbandprefix.sh
    
    #两个参数,参数1是db名字,参数2是表名前缀。
    params=`echo $#`
    echo "your input param is db=$1 and table prefix like $2"
    
    if [ $params -lt 2 ]
    then
      echo "Too Many Params,Can Only Accept Two Params"
      exit
    fi
    
    #连接MySQL并且获取前缀是$2的数据表
    var=$(mysql -hhost_address -P3306 -uuser_name -ppwd  -e"use '$1';show tables like '$2%';")
    
    count=0
    for i in $var;
    do
      let count=$count+1
      if [ $count -ne 1 -a $count -ne 2 ]
      then
      #delete from db
      echo "deleting ...$i"
      mysql -hhost_address -P3306 -uuser_name -ppwd   -e"use '$1';drop table $i"
      fi
    done
    

    过滤掉第一行&第二行是因为:是表头,不是table名


    1&2行

    另外一种场景,随着业务的发展,开机上存在的很多数据表已经不用了,在线上db中已删除,如何在开发机上仅保存线上有的数据表,其它的都删除呢?easy easy

    #! /bin/bash
    # !注意 强行和线上有的table一致,可能误删本地table
    
    #获取线上db中存在的表名列表
    online_tables=$(mysql -honline_host_address -P3306 -uuser_name -ppwd -D db_name  -e"show tables;")
    
    local_tables=$(mysql -hlocal_host_address -P3306 -uuser_name -ppwd -D db_name -e"show tables;")
    
    count=0
    #read table names
    for i in $local_tables;
    do
      let count=$count+1
      if [ $count -ne 1 -a $count -ne 2 ] && [[ ! "$online_tables" =~ "$i" ]]
      then
      #delete from db
      echo "deleting ...$i"
      mysql -hlocal_host_address -P3306 -uuser_name -ppwd -D db_name -e "drop table $i"
      fi
    done
    

    相关文章

      网友评论

          本文标题:MySQL批量删除数据表

          本文链接:https://www.haomeiwen.com/subject/rzgwnhtx.html