2012-09-13 49 views

回答

0

在網絡上搜索後,我發現了一個shell腳本到這裏丟棄所有表:http://www.cyberciti.biz/faq/how-do-i-empty-mysql-database/

然後,我改變了腳本,刪除數據庫中的所有視圖。 這是最後的結果是:

#!/bin/bash 
PREFIX="" 
SUFFIX="" 
HOST="localhost" 
PORT="3306" 

while getopts p:s:h:P: OPCAO; do 
    case "${OPCAO}" in 
     p) PREFIX="${OPTARG}" ;; 
     s) SUFFIX="${OPTARG}" ;; 
     h) HOST="${OPTARG}" ;; 
     P) PORT="${OPTARG}" ;; 
    esac 
done 

shift $((OPTIND-1)) 

MUSER="$1" 
MPASS="$2" 
MDB="$3" 

# Detect paths 
MYSQL=$(which mysql) 
AWK=$(which awk) 
GREP=$(which grep) 

if [ $# -eq 0 ] 
then 
    echo "Usage: $0 [-h Host] [-P Port] [-p Prefix-View-Name] [-s Suffix-View-Name] {MySQL-User-Name} {MySQL-User-Password} {MySQL-Database-Name}" 
    echo "Drops all views from a MySQL" 
    exit 1 
fi 

TABLES=$($MYSQL -h $HOST -P $PORT -u $MUSER -p$MPASS $MDB -e "SELECT table_name FROM information_schema.views WHERE table_schema = '$MDB' AND table_name LIKE '$PREFIX%$SUFFIX';" | $AWK '{ print $1}') 

for t in $TABLES 
do 
    echo "Deleting $t view from $MDB database..." 
    $MYSQL -h $HOST -P $PORT -u $MUSER -p$MPASS $MDB -e "drop view $t" 
done 

該解決方案將工作只是爲了誰使用類Unix系統。

調用腳本,我用:

./script.sh [-h host] [-P port] [-p prefixViewName] [-s suffixViewName] username password databaseName 

編輯:我改進了腳本接受選項參數,如主機,端口也是一個前綴和後綴過濾什麼意見將被丟棄。

2

如果要在MySQL客戶端中執行此操作,可以使用information_schema動態生成DDL語句,將它們轉儲到SQL腳本,然後執行該腳本。

實施例:

select concat('drop view ',table_schema,'.',table_name,';') as ddl 
into outfile '/tmp/drop_all_views.sql' 
from information_schema.views 
where table_schema = 'your_schema'; 

\. /tmp/drop_all_views.sql 
相關問題