前のセクションでは、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 -v を使用します。
source
コマンドまたは \.
コマンドを使用すると、mysql プロンプトからでもスクリプトを使用できます。
mysql> source filename;
mysql> \. filename
詳細については、セクション4.5.1.5「テキストファイルから SQL ステートメントを実行する」を参照してください。