mysql コマンドは -e で実行するSQLを指定できる。
セミコロンで区切れば複数のSQLを同時に実行することもできる。
$ mysql -e 'select 1; select 2'
+---+
| 1 |
+---+
| 1 |
+---+
+---+
| 2 |
+---+
| 2 |
+---+
-e を複数指定して、これでもいける。複数行に分けて書く時に自然。
$ mysql -e 'select 1;' \
> -e 'select 2'
-e で指定した文字列を単に結合して実行しているようで、セミコロンをなくしてしまうと文法エラーになる。
$ mysql -e 'select 1 ' \
> -e 'select 2'
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for
the right syntax to use near 'select 2' at line 1
ということは、逆にこういう書き方も可能ということがわかった。
$ mysql \
> -e 'SELECT *' \
> -e ' FROM mysql.user' \
> -e ' WHERE User = "root"'
シェルスクリプトが綺麗に書けそうです。