この記事では、MySQLの初心者に向けて、最大限、分かりやすくデータベースの作成をお伝えしていきます。
MySQLに接続までは分かったけど、スキーマって何?
実際にデータベースを作成する手順を教えて欲しい〜!
こんなお悩みに対して、自分の経験を元に、実際に簡易データベースの完成までを、順を追って説明していきます。
- スキーマ作成の考え方
- MySQLのデータベース、テーブル作成
- MySQLのレコード作成
初めてのスキーマ作成
環境
OS | Mac 10.15.4 |
Python | python 3.9 |
仮想環境 | Poetry |
Homebrew | 8.0.19 Homebrew |
MySQLのダウンロード方法と始め方
「MySQLはまったく触ったこともない!」
という方には、以下の記事でMySQLのダウンロード方法と、始め方をお伝えしていますので、ぜひ参考にしてください。
スキーマ作成
それでは早速、スキーマ作成からデータベースの完成までの流れを解説していきます。
MySQLでデータベースを運用するにあたって、まず、スキーマを作成する必要があります。
スキーマとは、データベースとほとんど同義というのが一般的な認識のようでしたが、ここでは、データベースの設計図だと考えてみてください。
設計図なので、データベースでどんな情報を扱い、蓄積していくのかを考える必要があります。
今回は、(完璧、僕の趣味で、)アメリカ文学の作家をテーマにデータベースを作成してみようと思います。
以下の表が今回作成するスキーマ、つまりはデータベースの内容です。
American Writer(AW)
ID | name | BD | works |
1 | Ernest Miller Hemingway | 1899/7/21 | The Old Man and the Sea |
2 | Jerome David Salinger | 1919/1/1 | The Catcher in the Rye |
3 | Francis Scott Key Fitzgerald | 1896/9/24 | The Great Gatsby |
4 | Stephen Edwin King | 1947/9/21 | Stand by Me |
5 | Raymond Thornton Chandler | 1888/7/23 | The Long Goodbye |
初めて作る際は、こんな風にエクセル(またはスプレッドシート)の表を用意してデータベース化していくのが分かりやすいと思います。
念のため、上から順に、ヘミングウェイ、サリンジャー、フィッツジェラルド、スティーブンキング、レイモンドチャンドラー。
アメリカ文学の英雄たちを思いついた順に並べています。笑
初めてのテーブルの作成
データベースの作成
(MySQLのデータベース作成までの手順は前回の記事でお伝えした通りです)
新しく「AW」(American Writerの略称です)というデータベースを作成していきます。
MySQLをスタートさせてから、以下のコマンドを実行します。
mysql> CREATE DATABASE AW;
その後、データベースの一覧をチェックしてみます。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| AW |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
AWというデータベースが、一番上(2行目)に作成されていますね!
テーブル作成
続いて、テーブルを作成します。
テーブルとは、エクセルでいうシートのようなもので、データベースに紐づいている表をイメージするといいと思います。
今回は、writerというテーブル、そして同時にカラムを作成します。
カラム(Column)とは、表の(縦)列のこと。
行はロウ(Row)と言いいます。
カラムは、ひとまず idと、nameだけ作成します。
(全てのカラムを同時に作成することも可能ですが、あえてカラムを追加する工程を書きたいと思います。)
mysql> CREATE TABLE aw.writer (id INT, name varchar(30))
id、nameの後ろにくっつけている int、varchar(30)はカラム型と呼ばれるものです。
idの列には数字を入れるていくため、intを設定。
name列にはテキストを入れるため、varcharを設定しています。
varchar(30)の(30)は、30字の制限を意味しています。
データベースの選択
次に、AWのデータベースを使うよ、と宣言します。
mysql> use aw
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
さきほどのwriterテーブルができたかチェックします。
mysql> show tables;
+--------------+
| Tables_in_aw |
+--------------+
| writer |
+--------------+
ちゃんとテーブルができてる!
カラムもチェックしてみます。
mysql> desc writer;
idとネームのカラムがばっちりできていました。
(やや見ずらいですが、2〜3行目の一番左のマスです。)
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
初めてのレコード作成
早速レコードを作成していきたいと思います。
レコードとは、レコード=記録のことで、ここでは行を指しています。
まずはヘミングウェイ(の行)を作成していきます。
(ID = 1、 name = Ernest Miller Hemingway を記録します。)
mysql> INSERT INTO writer VALUE (1,'Ernest Miller Hemingway');
レコードが作成できたかチェックします。
mysql> SELECT * FROM writer
+------+-------------------------+
| id | name |
+------+-------------------------+
| 1 | Ernest Miller Hemingway |
+------+-------------------------+
入っていました!初レコード作成ができました!
データの確認方法を簡単に説明します。
SELECT でレコードを選択。* はすべてを選択の意味。
FROMの後ろには、テーブルを入力します。
カラムの追加
idとnameのカラムしかまだないので、BD(Birthday)のカラムを追加します。
mysql> ALTER TABLE writer ADD BD date;
カラム型は、dateを選択しています。
チェックします。
mysql> SELECT * FROM writer;
+------+-------------------------+------+
| id | name | BD |
+------+-------------------------+------+
| 1 | Ernest Miller Hemingway | NULL |
+------+-------------------------+------+
無事にカラムができたようです。(NULLとは、空っぽやデータなしを意味します。)
カラムの削除、レコードの修正
ヘミングウェイの誕生日を追加します。
mysql> INSERT INTO writer(id,BD) values(1, '1899-07-21');
チェックします。
mysql> SELECT * FROM writer;
+------+-------------------------+------------+
| id | name | BD |
+------+-------------------------+------------+
| 1 | Ernest Miller Hemingway | NULL |
| 1 | NULL | 1899-07-21 |
+------+-------------------------+------------+
id=1のレコードに誕生日を追加、という意味で上記をやったら失敗していました!
改めて、ヘミングウェイの誕生日を追加します。
mysql> UPDATE writer SET BD ='1899-07-21' WHERE id=1;
mysql> SELECT * FROM writer;
+------+-------------------------+------------+
| id | name | BD |
+------+-------------------------+------------+
| 1 | Ernest Miller Hemingway | 1899-07-21 |
| 1 | NULL | 1899-07-21 |
+------+-------------------------+------------+
今度は成功しました。
WHERE はレコードを指定するときに使うよ
レコードの削除
失敗した方のレコードを削除します。NULLのレコードを削除します。
mysql> DELETE FROM writer WHERE name IS NULL;
チェックします。
mysql> SELECT * FROM writer;
+------+-------------------------+------------+
| id | name | BD |
+------+-------------------------+------------+
| 1 | Ernest Miller Hemingway | 1899-07-21 |
+------+-------------------------+------------+
無事に削除に成功しました。
データベース作成の仕上げ
あとはレコードを一気に追加するだけです。( ‘ ‘ を忘れるとエラーになるので注意!)
mysql> INSERT INTO writer(id,name,BD)
VALUES
(2,'Jerome David Salinger','1919-1-1'),
(3,'Francis Scott Key Fitzgerald','1896-9-24'),
(4,'Stephen Edwin King','1947-9-21'),
(5,'Raymond Thornton Chandler','1888-7-23');
最後にチェックしてみます。
mysql> select * FROM writer;
+------+------------------------------+------------+
| id | name | BD |
+------+------------------------------+------------+
| 1 | Ernest Miller Hemingway | 1899-07-21 |
| 2 | Jerome David Salinger | 1919-01-01 |
| 3 | Francis Scott Key Fitzgerald | 1896-09-24 |
| 4 | Stephen Edwin King | 1947-09-21 |
| 5 | Raymond Thornton Chandler | 1888-07-23 |
+------+------------------------------+------------+
よし!MySQLのテーブルまで作成できた〜!
今回は、ページの冒頭でご紹介した表(スキーマ)にあった「works」のカラムは省略しましたが、やり方は同じです。
まとめ
MySQL入門講座、いかがでしたでしょうか。
細かい説明は省きましたが、具体的にデータベースをどう作成していけばいいのか、一通りの流れがわかれば、あとは自由にデータベースを作成していけるはずです。
こんなに簡単なデータベースですが、初めて作成した際は、5時間かかってしまいました。
その際に、テーブルの作成、カラムの追加など、流れで説明されているものが調べた限りなかったので、ぜひ参考にしていただけたら嬉しいです。
コメント