2016-08-09 10 views
2

パターンに一致するテーブルを検索して切り捨てるスクリプトを作成したいとします。パターンに一致するテーブルを検索して切り捨てるスクリプト

私は、MySQLにログインし、正しいテーブルを与える、次の走っている:

:私は希望の出力は、SQLシェルスクリプトにこれをembeddするかどうかはわからないが

SELECT concat('TRUNCATE TABLE `', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'weather%'; 

TRUNCATE TABLE `weather`; 
TRUNCATE TABLE `weathermonth`; 
TRUNCATE TABLE `weathermonthlp`; 

このステートメントを実行します。

おかげ

+0

を実行する前にそれを検証する必要があるの

#!/bin/bash searchpattern="$1" table_list=$(mysql -BN -e "SELECT CONCAT(TABLE_SCHEMA,'.', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '$searchpattern%';") echo $table_list; IFS=" " while read i; do echo "TRUNCATE TABLE $i;" done < <(echo $table_list) 

シェルスクリプトでmysql出力を解析する必要はありません。 select/truncatingを実行するためにmysqlにストアドプロシージャを書くだけで、あなたのシェルスクリプトは単にmysql -u user -p pw -e 'を呼び出す必要がありますyour_function();' –

+0

問題は私たちが個々の切り捨てステートメントを実行するには、select concatを使用して実行するステートメントを出力し、spで実行することは可能ですか? – ranj1185

答えて

1

MySQLはシェルからコマンドを実行するには、例えばmysqlの標準入力にパイプすることができます:今

mysql << 'EOF' 
SELECT concat('TRUNCATE TABLE `', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'weather%'; 
EOF 

、MySQLのコマンドは、さらに生産MySQLのコマンド... それらを実行したい場合は、-sフラグを使用してmysql、 にパイプすることもできます。これは、プロセスでMySQL自体が生成する非クエリ出力を抑制するためです。

コンテンツあなたがMySQLのコマンドのいずれかの特殊文字をエスケープする必要がないように、文字通りに解釈され ヒアドキュメントであること
mysql -s << 'EOF' | mysql 
SELECT concat('TRUNCATE TABLE `', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'weather%'; 
EOF 

注意。

1

このようなものから始め、必要に応じてコードを追加して、データベースパラメータを見てみましょう。スペースで検索を呼び出すときは、必ず引用符を使用してください。

./truncate.sh「スペースでいくつかの検索であれば、そのことも可能テーブル名にスペースを持っている」スクリプトの出力SQL、しかし、あなたが

関連する問題