MySQLに限らずRDBMSを利用・
そこで今回は、
検証環境
今回は、
バッチモードでSQLを実行してみる
それでは以下のようなSQLを実行してみたいと思います。今回は単純に、
$ cat shibuya.sql select zip_code from zipcode where city like "%渋谷区%" order by zip_code;
mysqlコマンドラインクライアントでログインした状態で実行をしてみると、
$ mysql -uroot zipcode mysql> select zip_code from zipcode where city like "%渋谷区%"; +----------+ | zip_code | +----------+ | 1500000 | ~省略~ | 1510073 | +----------+ 73 rows in set (0.06 sec)
続いてバッチモードでSQLを実行していきます。バッチモードで実行する場合には、shibuya.
ファイルを指定します。実際に動かしてみましょう。
$ mysql -uroot zipcode < shibuya.sql zip_code 1500000 ~省略~ 1510073
このようにファイルを指定することで、
バッチモードで動かした際には、shibuya2.
として実行して確認してみましょう。
$ vim shibuya2.sql $ mysql -uroot zipcode < shibuya2.sql code old_zipcode zip_code prefecture_kana city_kana town_kana prefecture city town 13113 150 1500000 トウキョウト シブヤク イカニケイサイガナイバアイ 東京都 渋谷区 以下に掲載がない場合 ~省略~ 13113 151 1510073 トウキョウト シブヤク ササヅカ 東京都 渋谷区 笹塚
また、
$ mysql -uroot zipcode < shibuya.sql > result.tsv $ cat result.tsv zip_code 1500000 ~省略~ 1510073
バッチモードで実行した場合にも、-t
--table
)
$ mysql -uroot -t zipcode < shibuya.sql +----------+ | zip_code | +----------+ | 1500000 | ~省略~ | 1510073 | +----------+
逆にクライアントで接続してSQLを実行する時に、-B
--batch
)
$ mysql -uroot -B zipcode select zip_code from zipcode where city like "%渋谷区%" order by zip_code; zip_code 1500000 ~省略~ 1510073 exit $
また、-e
(--execute
)オプションを利用することで指定を行ったSQLを実行することもできます。こちらも-B
オプションと組み合わせるとTSVでファイルを取得できるので便利に扱えます。
$ mysql -uroot -B -e 'select zip_code from zipcode where city like "%渋谷区%" order by zip_code;' zipcode zip_code 1500000 ~省略~ 1510073
その他にも便利なものとして、-vvv
オプションや--force
オプションなどがあります。-vvv
オプションは実行したSQLをエコーしてくれるオプションです。出力された結果がどんなSQLによって生成されているのかがひと目でわかるようになるので、-B
オプションを付けてもTSVで出力することができないのは注意が必要です。
$ mysql -uroot -vvv zipcode < shibuya.sql -------------- select zip_code from zipcode where city like "%渋谷区%" order by zip_code -------------- +----------+ | zip_code | +----------+ | 1500000 | ~省略~ | 1510073 | +----------+ 73 rows in set (0.06 sec)
--force
オプションですが、
$ cat shibuya3.sql select machigai from zipcode; select zip_code from zipcode where city like "%渋谷区%" order by zip_code;
この例では1行目のmachigaiカラムが存在しないので、
$ mysql -uroot zipcode < shibuya3.sql ERROR 1054 (42S22) at line 1: Unknown column 'machigai' in 'field list' $
しかし--force
オプションを組み合わせると、
$ mysql -uroot --force zipcode < shibuya3.sql ERROR 1054 (42S22) at line 1: Unknown column 'machigai' in 'field list' zip_code 1500000 ~省略~ 1510073 $
あまりお行儀が良いとは言えないのですが、
接続完了後にクライアントからファイルを実行してみる
今回はmysqlクライアントで接続が完了した後に実行してみましょう。クライアントが接続済みの場合はsource
または\.
コマンドを利用することで、
mysql> source shibuya.sql +----------+ | zip_code | +----------+ | 1500000 | ~省略~ | 1510073 | +----------+ 73 rows in set (0.05 sec)
以上のように、
まとめ
今回はファイルに書いたSQLを実行する方法に関して紹介させていただきました。
Webアプリケーションなどでバッチ用の環境などがすでに提供されている場合はそちらを利用したほうが良いとは思いますが、
この他にもSQLをファイルの状態にしておくと、