環境を作って動かせる状態にしてみたけど、
次は 何をしたらいいんだろう……。
データベースは、SQL文という命令文で操作をします。
まずはそれだけ押さえておけばOK。
で、どういうSQL文を書けばいいの!?
それを今回は深掘りしていきます!
前提条件
- MySQLを導入済み
- コマンド操作(CUI)の環境が整っている
データベース一覧を確認する
SHOW DATABASES;
「;」のつけ忘れにご注意ください。
つけ忘れた場合は、「->」という状態になるので、そこで「;」を入力しましょう。
SQL文では、「;」を文の最後であることを意味します。
◯◯schemaなどがありますが、MySQL自身が動作するために必要なデータベースです。
MySQL を導入したら、
自動で作られる DBのことなんだね。
データベースを作成する
1 2 |
CREATE DATABASE ex_db; CREATE DATABASE ex_delete_db; |
・小文字でも大文字でもOKです。見分けやすいようにSQL文を大文字にしています。
・ちなみに、大文字小文字混合していても動きはします(例:CrEAtE)。
DBを試しに2つ作ってみましょう!
DBは、ユーザ情報などを保存しておくための
大きな貯蔵庫をイメージすればいいね。
データベースを削除する
1 |
DROP DATABASE ex_delete_db; |
先ほど作成したDBの1つを削除してみましょう。
「データベース一覧を確認する」SQL文を実行して、DBが削除されていることを確認してみましょう。
使用するデータベースを指定する
ここからは、「ex_db」を使っていきます。
1 2 |
USE ex_db; Database changed |
これでDBの指定が出来ました。
単純に、このDBを使う(USE)よ〜としているだけです。
テーブルを作成する
画像の色抜けがありますが、、、
気にせずテーブルを2つ作っていきましょう!
テーブルとは、実際のデータが格納される表のようなものです。
1 2 |
CREATE TABLE ex_users(id int, name varchar(255), age int); CREATE TABLE delete_users(id int, name varchar(255), age int); |
・テーブル作成時、カラムの定義が必要です。
・カラムとは、データの構造を表すものです。
エラーが出た時
・ERROR 1046 (3D000): No database selected
これが出た場合、USE文を使ってDBを選択していません!
データベースを選択しましょう。
先ほどのSQL文だと、こういうことになります。
数値型のid, 文字列型のname, 数値型のageを持った「ex_users」テーブルを作成
SQL文では、カラム名→データ型の順番に定義します。
テーブルの一覧を表示する
作成したら、先ほどのテーブル一覧確認SQLを実行してみましょう!
あれ?どんなテーブルがあったっけ?という時に「SHOW」句が使えます。
「データベース一覧を確認する」の時と同じようにやってみましょう。
1 2 3 4 5 6 7 |
SHOW TABLES; +-----------------+ | Tables_in_ex_db | +-----------------+ | delete_users | | ex_users | +-----------------+ |
※ちなみに、DB作成直後は何もないので、「Empty」と出ます。
DBのなかにテーブルを作成することができました!
テーブルのカラムを確認する
作成したテーブルがどんなカラムを持っていたのか忘れるときがあります。
テーブルの内容を確認するためのSQL文を試してみましょう。
1 2 3 4 5 6 7 8 9 |
DESC ex_users; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | id | int | YES | | NULL | | | name | varchar(255) | YES | | NULL | | | age | int | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) |
表のように綺麗に整列して出力されました!
テーブルを削除する
テーブルを削除してみましょう。
1 |
DROP TABLE delete_users; |
テーブル一覧確認SQL文を実行して、テーブルが無くなっていればOKです!
1 2 3 4 5 6 7 |
SHOW TABLES; +-----------------+ | Tables_in_ex_db | +-----------------+ | ex_users | +-----------------+ 1 row in set (0.00 sec) |
データベース内のデータを操作する
ここからは、データベースを扱う際の使用頻度9割以上を占めるSQL文を解説します。
データを挿入する
1 |
INSERT INTO ex_users VALUES(1, 'yutori', 22); |
idが「1」、nameが「yutori」、ageが「22」のデータを挿入しますという意味のSQL文です。
カラムの数と、挿入する値の個数は必ず同じです。
もしこれが、カラムと合っていない場合、
ERROR 1136 (21S01): Column count doesn't match value count at row 1
といったエラーが出力されます。
多くのデータを挿入する際、「このカラムは最初、NULLなんだよな〜」という時があります。
毎回面倒な時は、
1 |
INSERT INTO user VALUES (2, 'yamada', default); |
このようにすると、デフォルトに設定しているNULLとして挿入されます。
ここでは、年齢隠しになりますね。
え、デフォルトなんて設定したっけ?と思う方は、「テーブルのカラムを確認する」を確認してみてくださいね。
データを検索する(全てのデータを取得)
データを取得する、ではなく検索をします。
試しに、全てのデータを確認してみましょう。
1 2 3 4 5 6 7 8 |
SELECT * FROM ex_users; +------+--------+------+ | id | name | age | +------+--------+------+ | 1 | yutori | 22 | | 2 | yamada | NULL | +------+--------+------+ 2 rows in set (0.00 sec) |
出ました!
「*」は、全てを意味しています。
私と、年齢不詳の山田が出ていますね。
データを条件付きで検索する
条件付きで検索する上で、もっとデータが欲しいので、データを3件追加しましょう
ちなみに
一度に複数のデータを挿入することもできます!
1 |
INSERT INTO ex_users VALUES (3, 'tanaka', 27), (4, 'ishida', default), (5, 'yokota', 45); |
データを3件追加できたでしょうか?
では、さっそく条件付きで検索していきます。
1つのカラムのみ
全てのデータを取得するけど、年齢だけ知りたいな、名前だけ見たいな……という時があります。
そんな時は単純にカラム名のみ指名してみましょう。
1 2 3 4 5 6 7 8 9 10 11 |
SELECT name FROM ex_users; +--------+ | name | +--------+ | yutori | | yamada | | tanaka | | ishida | | yokota | +--------+ 5 rows in set (0.00 sec) |
nameカラムのみ取得できましたね!
nameの部分を「*」にしたり、「id」にしてみて、試してみてくださいね。
条件に一致したデータのみ
次に、「◯◯さんって何歳だっけ?」のような、特定のデータを取得したい場合に条件を付け足します。
1 2 3 4 5 6 7 |
SELECT * FROM ex_users WHERE name = 'yutori'; +------+--------+------+ | id | name | age | +------+--------+------+ | 1 | yutori | 22 | +------+--------+------+ 1 row in set (0.01 sec) |
「WHERE」句をつけることで、条件を付け足すことができます!
検索以外にも、様々な場面で使用します。
次を見てみましょう。
データを更新する
「あ、山田の年齢間違えてた!」
そんな時には、データの更新が必要ですね。
最初に、山田の年齢を確認してみましょう。
1 2 3 4 5 6 7 |
SELECT name, age FROM ex_users WHERE name = 'yamada'; +--------+------+ | name | age | +--------+------+ | yamada | NULL | +--------+------+ 1 row in set (0.00 sec) |
年齢不詳でしたね。
1 |
UPDATE ex_users SET age = 6 WHERE name = 'yamada'; |
もしこのSQL文で、WHERE句で条件を加えなかった場合、全てのデータが更新されます。
更新できたら、再度、年齢を確認してみましょう。
1 2 3 4 5 6 7 |
SELECT name, age FROM ex_users WHERE name = 'yamada'; +--------+------+ | name | age | +--------+------+ | yamada | 6 | +--------+------+ 1 row in set (0.00 sec) |
山田を6歳児に更新できました!
明らかに値がおかしい時は、idと間違えてないか?など確認しましょうね。
ちなみに山田は6歳児だったようです(という設定)。
データを削除する
必要なくなったデータを削除することもできます。
ユーザから「この投稿を削除する!」という操作が起きた時、実行するイメージですね。
1 2 |
DELETE FROM ex_users WHERE id = 5; Query OK, 1 row affected (0.00 sec) |
今回は、idが5の横田のデータを削除しました。
WHERE句で、名前一致、ID一致など条件を変えて、まとめて削除することも可能です。
・DBとテーブルの削除は「DROP」、データの削除は「DELETE」です。
・WHRE句での条件次第で、意図しないデータまで削除する恐れがあるので、確認しましょう。
まとめ
これまでに挙げたSQL文以外にも、多くの命令文があります。
SQL文だけで1冊の本が出版されるほどです。
さらに深く学んでみたい方は「SQL 一覧」など検索して調べてみてはいかがでしょうか。
また、MySQL公式のチュートリアルもあるので、ぜひ試してみてくださいね。