読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

シェルスクリプトからSQLを実行する

mysql

一応基本を押さえておく。

シェルスクリプトからSQLを実行する場合、いくつか方法がある。

  • eオプションで実行
  • SQLファイルをリダイレクション
  • ヒアドキュメント


■-eオプション


$ mysql -uroot test -e "select * from t_test"

          • +
id
          • +
1
          • +

◯メリット
・手軽に実行可能。
・セミコロンで区切れば複数のSQLが書ける。
◯デメリット
・ダブルクォートで囲んだ中でしかトランザクションが効かない。つまり、
mysql -uroot test -e "begin;"
mysql -uroot test -e "delete from t_test;"
mysql -uroot test -e "commit;"
とかやっても効かない。


SQLファイルをリダイレクション


$ mysql -uroot test < t_test.sql
id
1

◯メリット
・大変使いかってがよい。
・ファイル名の部分を変数に置き換えれば動的に読み込める。
シェルスクリプトSQLを分離できる。
SQLファイル内はトランザクションが有効。
◯デメリット
・特に思いつかない。


■ヒアドキュメント


$ cat t_test.sh
#!/bin/sh
mysql -uroot test < begin;
delete from t_test;
commit;
EOF
$ ./t_test.sh
id
1

◯メリット
シェルスクリプトの変数が埋め込める。
 例えば、select count(*) from $tableName とか変数を設定すれば、SQLファイルを用意せずに動的SQLが組める。
トランザクションが有効。
◯デメリット
シェルスクリプトSQLが分離できない。