MySQL批量删除数据表

当我想批量删除有共同前缀的数据表时,我发现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批量删除数据表)