MySQL で SQL を記述した外部ファイルから実行する方法。
MySQL というか mysql コマンドで SQL を記述した外部ファイルから実行する方法をメモしておく。
mysql コマンドのバージョン。5.7 とか 5.6 でも同じやり方が使える。
$ mysql --version mysql Ver 8.0.27 for Linux on x86_64 (MySQL Community Server - GPL)
動作を確認する用の適当なテーブルとデータを作っておく。
あと認証にかかわるオプション -u
とかは記載は省略していく。
mysql> create database mydb; Query OK, 1 row affected (0.01 sec) mysql> use mydb; Database changed mysql> create table my_table(id int); Query OK, 0 rows affected (0.04 sec) mysql> insert into my_table values(1); Query OK, 1 row affected (0.02 sec)
SQL を記述した外部ファイルから実行する方法
SQL を記述したファイルを mysql コマンドの標準入力にリダイレクトする
mysql コマンドは SQL ステートメントを標準入力から読み込んで実行するので、SQL を記述したファイルを mysql コマンドの標準入力にリダイレクトする。
$ cat select.sql use mydb; select * from my_table; $ mysql -t < select.sql +------+ | id | +------+ | 1 | +------+
SQL を記述したファイルをパイプで mysql コマンドの標準入力に接続する
mysql コマンドは SQL ステートメントを標準入力から読み込んで実行するので、SQL を記述したファイルをパイプで mysql コマンドの標準入力に接続する。 自分がネットワーク越しに巨大な SQL ファイルを取得して実行するとかはだいたいこれ。
$ cat select.sql | mysql -t +------+ | id | +------+ | 1 | +------+
source コマンドでSQL を記述したファイルを読み込む
mysql コマンドの対話モードで source
コマンドを実行すると外部ファイルを読み込んで実行する。
$ cat select.sql use mydb; select * from my_table; $ pwd /home/bob $ mysql mysql> source /home/bob/select.sql +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec)
source
コマンドは相対パスを指定してもちゃんとファイルを読み込んでくれる。
mysql> source ./select.sql +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec)
さらに source
コマンドは ~
をホームディレクトリのパスに展開してくれるのでこんな感じにも使える。
mysql> source ~/select.sql +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec)
あと source
コマンドは \.
でも実行できる。source
とタイプするのがだるいときは \.
とタイプすると4文字分を省略できる。
mysql> \. ~/select.sql +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec)