データベース?MySQL?
初心者のうちは、そもそもデータベースが何なのか、SQLって聞いたけどよくわかってない、みたいな人も多いと思います。
そんな人のために、まずはデータベースを理解してもらうために、ざっくり解説し、その後にMySQLでやれるようになっておいた方がいいことを解説していきます。
もうデータベースについて理解されていて解説不要という人は、この章は飛ばしていただいて大丈夫です。
ざっくり、データベースとは
みなさんも想像している通りだとは思いますが、データベースとはその名の通り、データを溜めているシステムです。
DataBase なので、DBと略して呼ばれることが多いです。
DBに入っているデータは、Webアプリ等の別のシステムを介して、ユーザーの入力した情報を溜めたりしています。
データには色々な形がありますが、Amazonの購入履歴とかがDBに保存されているというイメージです。
※DBにも色々な種類があるものの、この記事ではMySQLを対象に解説します。
DB(データベース)とWebアプリの関係
一般的なWebサービスは多くの場合、上の画像のような構成になっています。
アプリ(左側)があって、DB(右側)があるというものです。(厳密に言うと果てしないので説明のため構成は簡略化してます)
そして、サービスのユーザーはアプリしか触らないため、DBを意識することなく、画面のボタン等を操作するだけで会員情報などのデータを見ることができますよね。
しかし、システムの内部では次のような事が起こっています。
- ユーザーが画面操作する
- アプリが操作内容を受け付けて処理を開始
- アプリがデータ操作するためにSQLを構築し、DBに送信
- DBがアプリから送信されたSQLを受信して実行
- 実行した結果をDBからアプリに返却
- アプリは結果を用いて処理を継続。処理が終了したら画面の情報を更新
- 画面が更新されて、ユーザーが情報を見れる
ここで重要なのが、DBのデータは専用の操作言語(SQL)によって、内容を閲覧・編集することができる点です。
そしてエンジニアは、DBもいじくれるようになる必要があるため、SQLをある程度できないといけません。
ということでお待たせしました!
これよりMySQLで最低限やれるようになっておいた方がいい点を解説していきます。
MySQLでやれるようになっておいた方がいいこと
①ログインしてデータベースを選択
mysqlを使うにあたって不可欠なのは、まずSQLを使える状態にする(ログインする)ことです!
まあコレをやらなければ始まらないので(笑)
mysqlに接続
ターミナル画面を開いて以下のmysqlコマンドを使用してデータベースにアクセス(接続)します。
mysql -h ホスト名 -u ユーザー名 -p
すると、以下の画面のようにパスワードを聞かれるので、ユーザー名に応じたパスワードを入力してEnterを押すと、ターミナルの左の部分が musql> という風になります。
これで接続は完了です。
ちなみに、上の画面では「ホスト名」を指定していませんが、これを指定しない場合は “localhost” に自動的に接続しにいきます。
つまり、以下のように指定しているのと同じことですね。
mysql -h localhost -u ユーザー名 -p
データベースを選択
mysqlに接続できたら、まずはどのデータベースを使うか選択します。
ここで言うデータベースは、MySQL DB の中のさらに小さな箱(DB)であり、ややこしいですが、大きな箱の中の小さな箱と捉えてください。
この小さな箱がいくつあって、それぞれどんな名前なのかを一覧化するコマンドが、show databasesコマンドです。
show databases;
上記のコマンドを実行すると、以下の画像のように、MySQL DB の中にいくつかの Database が存在しているのがわかります。
この場合、4つの Database が存在していることになります。
これらはDBを構築した時に自動的に作成されるもので、自分で作成した覚えがないと思いますが、システム側で使用されるものなので、消したりしないでください。
次に、使用する Database を選択します。
以下のコマンドで使用する対象の Database を選択してください。
use 対象のDatabase名;
コマンドを実行すると、以下の画面のように”Database changed”と出力されるので、これでOKです。
(本来は自分で作成したDatabaseを選択しますが、この例ではmsyqlのDatabaseを選択してます)
これでやっと、テーブルに対してSQLを実行する準備が整いました!
これよりSQLの説明に移っていきます。
②セレクト文 (SELECT)
SQLで一番使うのがセレクトです!
特定のテーブルから様々な条件でデータを抽出するコマンドで、以下のように使用します。
select カラム名 from テーブル名;
カラム名の箇所は、複数カラムをカンマ”,” で選択することも可能ですし、アスタリスク”*” で全カラムを指定することも可能です。
実際に複数のカラムを指定してセレクトした結果が以下です。
2つのカラムと、それに応じたデータ内容が出力されています。
③セレクトのちょっとした応用
セレクトには様々なオプションがあり、本当に色々な使い方が出来ます。
最初のうちは複雑なセレクト文を書くよりも、基礎を固めた方がいいので、頻出するものをいくつか紹介しておきます。
どれもシンプルなものなので、覚えておくと早々に初心者から抜けられると思います!
count(*)
まずはカウントです。
指定したテーブルにレコードが何件入っているか確認できます。
select count(*) from テーブル名;
実際にやってみると、以下のような形になります。
アスタリスクの箇所をカラム名にしてあげると、そのカラムのうち、データが入っているレコードの件数を取得できます。
where句
次にwhereです。これもSQLでは確実に使うと言っても過言ではありません。
指定したテーブルのうち、where で条件指定した結果を取得します。
例えば、”name”というカラムがNULLじゃないレコードを取得したいや、”created_at”というカラムが任意の日付以降のレコードが欲しい場合など、色々な条件を指定できます。
select * from テーブル名 where 条件;
上記の「”name”カラムがNULLじゃないレコード」を取得したい場合には以下のように書きます。
(テーブルは”users”として)
select * from users where name is NOT null;
④インサート文 (INSERT)
データ(レコード)を新規追加するのがインサートです。
DBはサービスを介してデータ操作されるのが基本なので、インサートは動作確認とかでしか使われず、使用頻度は低いです。
が、こういう機能があることは覚えておきましょう。
以下のような形で、カラムとそこに入れる値を指定して実行します。
値は、カラムの型がstringの場合はダブルクウォート(“”)で囲うなど、データ型には気をつけてください。
insert into テーブル名 (カラム1, カラム2) values (値1, 値2);
⑤アップデート文 (UPDATE)
最後にアップデート文です。
レコードの内容を更新する際に使用します。
セレクトの箇所で説明した、「where句」と一緒に使うので、whereの使い方は抑えておきましょう。
コマンドは以下の形です。
update テーブル名 set カラム1 = 値1, カラム2 = 値2 where 条件;
更新するカラムが1つの場合は、1つだけ指定してあげればOKです。
whereで条件を指定しないでアップデートを実行してしまうと、全てのレコードをその内容で書き換えてしまうので、注意してください。
UPDATEの実践的な使用手順
DBのデータをSQLで更新する場合、戻すのが少し大変なので、慎重に行わなくてはなりません。
慎重かつ確実に更新する手順を軽く触れておきます。
- SELECTで対象のデータを確認する
- whereの条件が誤っていないことを確認
- 実行していたSELECT文をUPDATE文に書き換える(where以降は絶対に書き換えない)
- カラムの更新内容が誤っていないことを確認してUPDATE実行
- 再度SELECTで対象のデータを確認する(ここで誤っていてもUPDATEでまた戻せる)
まとめ
データベースに触れると、最初のうちはわからないことだらけで、もっと画期的な物はないのか!なんて考えてしまうかもしれません。
(そんな物が発明できるといいんですけどね。。)
それでも触っていれば段々と慣れてきて、そのうち複雑なSQLを作れるようになります。
そうすれば市場価値の高いエンジニアに一歩近づけるでしょう。
そのためにもまずは、この記事で紹介したような基礎的な内容を使いこなせるようになれることを祈ってます!
コメント