データベースを操作する際、SQLをコマンドプロンプトやターミナル、またはデータベース管理ツールを通じて直接SQL文を記述する以外にも、SQLファイルを用意しておきSQL文を実行する方法が一般的です。
本記事では、MySQLでのSQLファイルの実行方法を3種類ご紹介していきたいと思います。
SQLファイルとは
まずSQLファイルに関してですが、拡張子が「.sql」と設定されたファイルのことを指します。
内部にSQL文が記述されているファイルで、実体はテキストファイルであるため、テキストエディタを利用して開くことが可能です。
ファイル名.sql
SQLファイルを使用する利点
SQLファイルを用意しておくことで、SQL文を毎回手打ちする必要がなくなるため、ミスを減らすことに繋がります。
また、複雑な処理や長いSQL文を書く手間が省けることから、開発効率を上げることにも繋がります。
拡張子が.sql以外でも実行可能
SQLファイルは拡張子が「.sql」と紹介しましたが、中身にSQL文が記述されていれば実際には「.txt」だろうが構いません。
ただし、他のユーザーが一目でSQLファイルだと判別しやすいように「.sql」を使用する方法が推奨されます。
SQLファイルを実行する方法
SQLファイルを実行する方法として3種類をご紹介していきます。
事前準備
今回サンプルで実行するSQLファイルには、「test.sql」というファイル名で、下記のSQL文を記述しています。
SELECT * FROM user;
「test.sql」は「/Users/ユーザー名/Documents/sql」フォルダ内に格納しています。
userテーブルには下記のデータを用意しておきました。
+----+-----------------+------+ | id | name | age | +----+-----------------+------+ | 1 | 山田太郎 | 30 | | 2 | 山田花子 | 25 | | 3 | 鈴木じろう | 20 | +----+-----------------+------+
さいごにMySQLを下記のコマンドで立ち上げておきましょう。
sudo mysql.server start;
SQLファイル実行1: sourceコマンド
実行方法の1つ目は、MySQLにログインした状態で利用します。
MySQLのログインには下記のコマンドが利用可能です。
mysql -u root -p
設定したパスワードを入力してログインしてください。
ログインが完了して下記の画面になっていれば、準備完了です。
ここから実際にSQLファイル実行に移る訳ですが、基本的な構文は下記となります。
source ファイル名(ファイルパス);
ファイル名の部分には具体的なファイルパスを指定して実行します。
source /Users/ユーザー名/Documents/sql/test.sql;
下記の画像のようにSQL文の結果が取得出来ていることをご確認頂けます。
SQLファイル実行2: \.コマンド
2つ目の実行方法に関しても、MySQLにログインした状態で実施します。
MySQLへのログイン方法は、1つ目の実行方法で紹介した手順を参照してください。
まずは基本的な構文からご紹介します。
\. ファイル名(ファイルパス)
1つ目の実行方法の「source」コマンドが「\.」コマンドに変更されただけですね。
では実際に実行してみましょう。
\. /Users/ユーザー名/Documents/sql/test.sql
実行した結果は下記の画像のように全く同じ結果が表示されていることをご確認頂けます。
SQLファイル実行3: mysqlコマンド
3つ目の方法では、MySQLにログインする前のターミナルコマンドの状態で、SQLのファイル実行までを一括で実施してしまう方法です。
ただし、今回ご紹介する方法を実行する場合、SQLファイルに利用するデータベースを指定する「USE」コマンドを記述しておく必要があることには注意してください。
サンプルのSQLファイルの場合、下記のように修正します。
USE データベース名; SELECT * FROM user;
上記の方法を試していた方は、一度「exit」コマンドでMySQLをログアウトしておいてください。
基本的な構文は下記となります。
mysql -u root -p < ファイル名(ファイルパス)
サンプルの場合、下記のようになりますね。
mysql -u root -p < /Users/ユーザー名/Documents/sql/test.sql
パスワードの入力を求められますので、MySQLに設定したログイン用のパスワードを入力しましょう。
SQLファイルを実行した結果が表示されていることをご確認頂けます。
SQLファイルの実行:応用編
ここまでで、SQLファイルの実行方法について確認してもらいました。
お気づきの方もいらっしゃるかも知れませんが、SQLファイル内部には1つのSQL文しか記述出来ないという訳ではありません。
複数のSQL文を記述した場合、1つのファイルを実行するだけで、上から順番にファイル末尾までSQL文をまとめて実行することも可能です。
サンプル
今回は下記のようなサンプルSQLファイルを作成してみました。
上述したuserテーブルのバックアップ用テーブル「user_bk」を作成し、全てのデータをコピーした後にバックアップテーブルのデータを確認するSQL文を1つのファイルにまとめています。
test.sql
USE test_db; CREATE TABLE user_bk( id int, name varchar(50), age int, bk_date date ); INSERT INTO user_bk(id, name, age, bk_date) SELECT id, name, age, now() FROM user; SELECT * FROM user_bk;
今回は3つ目に紹介したコマンドで実行してみましょう。
mysql -u root -p < /Users/ユーザー名/Documents/sql/test.sql
実行した結果、下記の画像のようにuser_bkテーブルからuserテーブルに存在したデータのバックアップが取得出来ていることをご確認頂けます。
さいごに:SQLファイルを活用して開発効率を上げよう
本記事では、SQLファイルの実行方法について、Mac環境でMySQLを利用する際のコマンドをご紹介してきました。
実務では何度も利用するSQL文を、SQLファイルとして保存する方法は一般的です。
これまで、SQLファイルを開いてSQL文をコピペしていたという方も、今回ご紹介したように簡単なコマンドで実行可能ですので、ぜひ使い方を覚えて開発効率を上げるための手法としてご活用ください。
SQLファイルの実行は非常に簡単であるため、安易に実行してしまいがちですが、実行する前に利用するデータベースを必ず確認し、本番環境と開発環境の実行間違いを起こさないように注意しましょう。
ご紹介するサンプルはMac環境でMySQLがインストールされた状態で実行しています。
ご自身の環境により適宜読み替えをお願いします。