Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQLとヒアドキュメントをうまく使いこなす

MySQLとヒアドキュメントをうまく使いこなされば、さくっとSQLをファイルを作ることができます。はじめは戸惑いますが慣れれば簡単です。数百回はやったかも(^^;)

ヒアドキュメントを使って、SQLファイルを作成する例

今回の例で、EOT の名前にしましたが、別に、QIITAでも良いし、とにかくEOT ~ EOTの間が文中でかぶらないものであれば問題ないです。

  • SQL ファイルを生成し、それを、MySQLで実行する

MySQLでコマンドからSQLを直接実行するときは、 -e というオプションをつければいいのですが、長いSQLの場合一行にだらって書くのってめんどくさいですよね。だからSQLファイルをヒアドキュメントで事前に作ってMySQLでそのSQLファイルを読み込ませるって方法がスマート!

  • SQLファイルを生成して、MySQLで実行
cat << EOT > /tmp/sample.sql
SELECT
  table_schema,
  table_name,
  current_timestamp as wtime
from
  information_schema.tables 
where
  table_schema = 'information_schema' ;
EOT

# パイプで実行する例
cat /tmp/sample.sql | mysql -u root -p 
# リダイレクトで実行する例
mysql -u root -p < /tmp/sample.sql 
  • SQL ファイルも生成しないで直接、MySQLに食わせる

もうファイルなんていらねー。。とにかく、作ったSQLを直接MySQLに食わせたいなんていう場合はこちら

  • ヒアドキュメントを直接MySQLで実行する
mysql -u root -p << EOT
SELECT
  table_schema,
  table_name,
  current_timestamp as wtime
from
  information_schema.tables 
where
  table_schema = 'information_schema' ;
EOT
  • ヒアドキュメント内に変数をセットする

いろいろやっていくと、ヒアドキュメント内に予めセットした変数を入れたい場合がでてくると思います。 そんなときはこんな感じでやればいいです。

_text="テストです" 
cat << EOT > /tmp_sample.sql
 select
    '${_text}' ;
EOT

cat /tmp_sample.sql
-----
 select
    'テストです' ;
-----
  • ヒアドキュメントの内容をそのまま変数にセットする

_SQLという変数にヒアドキュメントがまるっと入ります!!

_SQL=`cat <<EOS
SET sql_log_bin=OFF;
SET sql_mode='IGNORE_SPACE,PIPES_AS_CONCAT,NO_BACKSLASH_ESCAPES' ;

SELECT *
FROM ${_SCHEMA}.${_TABLE}
${_WHERE};
EOS`

注意事項

EOT の前後にはスペースも何もいれちゃだめです。(入れて良いのは改行のみ)ここだけ注意すれば後は楽勝です