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