前のセクションでは、mysql をインタラクティブに使用してクエリーを入力し、結果を表示しました。mysql をバッチモードで実行することもできます。そのためには、実行するコマンドをファイルに記述し、そのファイルから入力を読み取るように mysql に指示します。
shell> mysql < batch-file
mysql を Windows で実行する場合に、ファイル内の一部の特殊文字によって問題が発生するときは、次のように実行できます。
C:\> mysql -e "source batch-file"
コマンド行で接続パラメータを指定する必要がある場合、コマンドは次のようになります。
shell> mysql -h host -u user -p < batch-file
Enter password: ********
この方法で mysql を使用する場合は、スクリプトファイルを作成してから、そのスクリプトを実行することになります。
スクリプト内の一部のステートメントでエラーが発生してもスクリプトを続行する場合は、--force
コマンド行オプションを使用します。
なぜスクリプトを使用するのでしょうか。いくつかの理由を次に示します。
クエリーを繰り返し実行する場合 (毎日、毎週など)、スクリプトにすると、実行するたびに入力し直す必要がなくなります。
既存のクエリーのスクリプトファイルをコピーして編集することによって、類似の新しいクエリーを作成できます。
バッチモードはクエリーの開発時にも役立ちます。特に、複数行にわたるコマンドまたは複数ステートメントによるコマンドシーケンスを使用する場合に便利です。間違いがあっても、すべてを入力し直す必要はありません。スクリプトを編集して間違いを修正してから、mysql で再度実行するだけで済みます。
-
多量の出力を生成するクエリーの場合、画面でスクロールアップする出力を見る代わりに、pager を介して出力できます。
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;
mysql> \. filename
詳細については、セクション4.5.1.5「テキストファイルから SQL ステートメントを実行する」を参照してください。