スキーマを考える
いよいよ、データベースの中身を作成していきます。
いろいろと調べたのですが、知りたいことを一連の流れで説明されているページが全くなかったので、今回ここにまとめることにしました。
まず、どんなスキーマを作成するのかを考える必要があります。
スキーマとは、データベースとほとんど同義というのが一般的な認識のようでしたが、設計図みたいなニュアンスがあるようです。
僕は悩んだ結果、アメリカ文学の作家をテーマにデータベースを作成してみようと思いました。
これが今回作成するデータベースの内容です。
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> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sampledb |
| sys |
+--------------------+
5 rows in set (0.02 sec)
「AW」というデータベースを作成します。
mysql> CREATE DATABASE AW;
改めて、データベースをチェックします。
mysql> show databases;
AWというデータベースが作成できました。
+--------------------+
| Database |
+--------------------+
| AW |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
今度は、テーブルを作成します。writerというテーブルです。
やり方が分からなかったので、カラムは、一旦、idと、nameだけ作成しました。
mysql> CREATE TABLE aw.writer (id INT, name varchar(30))
id、nameの後ろにくっつけている int、varcharはカラム型と呼ばれるものです。
idは数字なのでint
nameはテキストなので、varchar。(30)は30字の制限という意味らしいです。
なので、(10)であれば、10字の制限です。今回は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とネームのカラムがばっちりできていました。
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
レコード作成
早速レコードを作成していきたいと思います。
まずはヘミングウェイです。
mysql> INSERT INTO writer VALUE (1,'Ernest Miller Hemingway');
作成できたかチェックします。
mysql> SELECT * FROM writer
入っていました!初レコード作成の完了です!
+------+-------------------------+
| id | name |
+------+-------------------------+
| 1 | Ernest Miller Hemingway |
+------+-------------------------+
カラムの追加
idとnameのカラムしかまだないので、BD(Birthday)のカラムを追加します。
カラム型は、dateを選択しました。
mysql> ALTER TABLE writer ADD BD date;
チェックします。
mysql> SELECT * FROM writer;
無事にカラムができたようです。
+------+-------------------------+------+
| id | name | BD |
+------+-------------------------+------+
| 1 | Ernest Miller Hemingway | 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 |
+------+-------------------------+------------+
失敗した方のレコードを削除します。NULLのレコードを削除するようにしました。
mysql> DELETE FROM writer WHERE name=NULL;
しかし、何の変化もない。
+------+-------------------------+------------+
| id | name | BD |
+------+-------------------------+------------+
| 1 | Ernest Miller Hemingway | 1899-07-21 |
| 1 | NULL | 1899-07-21 |
+------+-------------------------+------------+
こっちが正解でした。
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 |
+------+------------------------------+------------+
※今回は、先ほどの表(スキーマ)にあったworksのカラムは省略しましたが、やり方は同じです。
まとめ
これだけですが、所要時間これまた5時間くらいかかりました。
テーブルの作成、カラムの追加など、流れで説明されているものが調べた限りなかったので、ぜひ参考にしていただけたら嬉しいです。
参考にさせていただいた記事。
MySQLでテーブルへカラムを追加するALTER TABLE ~ ADD
https://programming-beginner-zeroichi.jp/articles/189
【SQL】DELETE文でNULLレコードを削除する方法
https://oreno-it.info/archives/2873
MySQL – レコードの追加・変更・削除
【MySQL入門】INSERT文を使いこなす!基本からSELECT句まで一挙紹介