これまでのセクションでは、mysql
を対話式に使用して、クエリを入力し、結果を表示させていました。mysql
は、バッチモードでも実行できます。バッチモードで実行するには、実行するコマンドをファイルに記述し、そのファイルから入力を読み込むように
mysql
に指示します。
shell> mysql < batch-file
Windows 上で mysql
を実行していて、ファイルに含まれる特殊文字によって問題が発生する場合、以下のように指定します。
dos> mysql -e "source batch-file"
コマンドラインで接続パラメータを指定する必要がある場合、以下のようなコマンドを実行します。
shell> mysql -h host -u user -p < batch-file
Enter password: ********
バッチモードで mysql
を実行する場合、まずスクリプトファイルを作成してからそれを実行します。
スクリプトファイルに含まれるステートメントの一部でエラーが発生した場合も、その後の処理を継続させる場合は、--force
コマンドラインオプションを指定する必要があります。
スクリプトを使用する理由を以下に示します。
クエリを繰り返し実行する場合(たとえば、毎日または毎週)、それをスクリプトにすることによって、実行するたびに同じクエリを入力する手間を省くことができる。
スクリプトファイルをコピーして編集することによって、同じような既存のクエリから新しいクエリを作成できる。
クエリの開発中は、特に、複数行にわたるコマンドまたは複数ステートメントによる一連のコマンドを使用するクエリの場合、バッチモードで実行できると便利である。どこかに間違いがあっても、すべてを再入力する必要はない。スクリプトファイルを編集して間違いを修正し、mysql
にそれを実行するように指示するだけでよい。
大量のデータを出力するクエリがある場合、画面上でデータが一気にスクロールアップするのを見るのではなく、出力をページ表示コマンドに渡して 1 ページ単位で表示させることができる。
shell> mysql < batch-file | more
出力をファイルに取り込んで、後で使用することができる。
shell> mysql < batch-file > mysql.out
自分で作成したスクリプトを配布することで、他人にも同じコマンドを実行させることができる。
たとえば cron
ジョブからクエリを実行する場合など、対話式で処理できない場合がある。この場合は、バッチモードを使用する必要がある。
mysql
をバッチモードで実行する場合、その出力形式は、対話式に実行する場合とは異なります(より簡潔に出力される)。たとえば、mysql
を対話式に実行する場合、SELECT DISTINCT
species FROM pet
の出力は以下のようになります。
+---------+ | species | +---------+ | bird | | cat | | dog | | hamster | | snake | +---------+
バッチモードで実行した場合は、以下のように出力されます。
species bird cat dog hamster snake
バッチモードでも対話式と同じ出力形式でデータを取得するには、mysql
-t
を使用します。実行しているコマンドを出力にエコーするには、mysql
-vvv
を使用します。
source
コマンドを使用すると、mysql
プロンプトからでもスクリプトを実行できます。
mysql> source filename;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.