MySQLやPostgreSQLなど「SQL」というワードは分かっていても、拡張子でSQLを見かけることはあまりないかもしれません。
こと学習したての方にとっては、まだ見たことのない方も多いと思います。
このSQL拡張子のファイルが何の役に立つのか?どういったことのためのものなのか?今回はその解説を行っていきたいと思います。
拡張子がSQLとなっているファイル
SQLの命令文で構成されているファイルをSQLファイルと呼びます。
これがどういう場合に使用されるかについてはその作成者次第ではありますが、予め決まった動作を実行したい場合にこのファイルの中にクエリを書いておいて、SQLにこのファイルを読み込ませることでSQL文を実行させることが出来るというものです。
なぜこのような事をするかというと、例えば何度も同じクエリを発行するというのは記述ミスを誘発することに繋がりかねません。
かといってクエリを変数に代入しておいても、クラスが違えば呼び出し時にそのクラスの読み込み命令を宣言する必要があり、こちらも手間がかかります。
こういった場合は.sqlに記述しておけば、一度の記述で何度でも使いまわしがきくため、人的ミスも減り開発にかかる手間も省略できるのでこのような方法がよくとられるケースがあります。
また、.sqlというとなじみがあまりない拡張子かもしれませんが、要するにsql文を発行できる状態であれば特に.sqlにこだわる必要もありませんので.txtでも構いません。
SQL文を準備する
では早速、実際にどのように実行させるのかについて見ていきましょう。
まず最初に、読み込ませる基となるsql文を記述したファイルを作成します。
これはテキストファイルで構いませんので、メモ帳などに記述しましょう。
もちろん一目でわかるようにsql拡張子にしておきたいなら、メモ帳を開き保存時に拡張子の変換を行うだけなのでどちらでも構いません。
今回は例として以下のSQL文を発行するようにします。
DROP TABLE ID EXISTS users; CREATE TABLE users( id integer, name varchar(30), age integer ); INSERT INTO users VALUES (1, arex, 20), (2, Jackson, 23), (3, Liam, 16), (4, Noah, 30), (5, Aiden, 18), (6, Caden, 25);
このSQL文をまずはメモ帳に記述し保存しておきます。
保存時の拡張子は今回は「.sql」としました。
これで準備は整ったので、次はこのファイルを読み込みます。
二通りの読み込み方法
方法はいくつかありますが、まずは基本的なコマンドラインを使った読み込み方法から説明します。
最初にデータベースを準備しておきます。
データベースの作成は以下の通りです。
# mysql -u root -e "CREATE DATABASE IF NOT EXISTS sample_db"
ここでは”sample_db”という名前のデータベースを用意しました。
次に、コマンドでリダイレクトを使用し該当ファイルを読み込みます。
# mysql -u root -D sample_db < sqlSample.sql
コマンドはこれで終了です。
このようにすることで、該当データベースにテーブルが出来て、レコードまで作成されています。
結果を見てみましょう。
# mysql -u root -D sample_db < sqlSample.sql // 登録されたかどうかを確認 # mysql -u root Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 754 Server version: 10.4.10-MariaDB mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> use sample_db; Database changed MariaDB [sample_db]> select * from users; +------+---------+------+ | id | name | age | +------+---------+------+ | 1 | Arex | 20 | | 2 | Jackson | 23 | | 3 | Liam | 16 | | 4 | Noah | 30 | | 5 | Aiden | 18 | | 6 | Caden | 25 | +------+---------+------+ 6 rows in set (0.000 sec)
データベースからSELECTでリストを確認してみると、ファイルから出力されたクエリにより登録が完了していることが確認できます。
もう一つの方法はMySQLシェルコマンドから登録をかける方法です。
これも似たような形となりますが、若干コマンドが異なります。
シェルコマンドを使用する場合には以下のように記述します。
source sqlSample.sql
記述はこれだけです。
シェルコマンドでは”source”を使用することでファイルを実行します。
これで先ほどと同じように登録までが完了します。
それでは再度、登録できたかどうかを確認してみましょう。
MariaDB [(none)]> use sample_db Database changed MariaDB [sample_db]> source sqlSample.sql Query OK, 0 rows affected, 1 warning (0.000 sec) Query OK, 0 rows affected (0.018 sec) Query OK, 6 rows affected (0.002 sec) Records: 6 Duplicates: 0 Warnings: 0 MariaDB [sample_db]> select * from users; +------+---------+------+ | id | name | age | +------+---------+------+ | 1 | Arex | 20 | | 2 | Jackson | 23 | | 3 | Liam | 16 | | 4 | Noah | 30 | | 5 | Aiden | 18 | | 6 | Caden | 25 | +------+---------+------+ 6 rows in set (0.000 sec)
“source”がエラーなく実行されたことで、「Query OK, 0 rows affected, 1 warning (0.000 sec)」以下が出力されていることが確認できます。
またSELECTを使用しテーブルを確認した際にもきちんとテーブル内にレコードが存在していることが確認できました。
まとめ
いかがでしたか?
今回はMySQLで外部ファイル(拡張子が.sqlのファイル)を読み込みその中に記述されているSQL文を実行するまでの解説をしてみました。
制作現場では複数のスタッフで手分けしてシステムを完成させますが、今回の方法を使えばプログラムを分散させ、同時に複数で色々なシステムを構築することが可能になります。
学習を始めた方も、このようにマルチタスクな考え方や方法を身に着け、できるだけ実践で役立つような学習をするよう心がけてください。