【MySQL】初めてのスキーマ作成+テーブル〜レコード作成。データベースの完成までを流れで説明

MySQL入門

スキーマを考える

いよいよ、データベースの中身を作成していきます。

いろいろと調べたのですが、知りたいことを一連の流れで説明されているページが全くなかったので、今回ここにまとめることにしました。

まず、どんなスキーマを作成するのかを考える必要があります。

スキーマとは、データベースとほとんど同義というのが一般的な認識のようでしたが、設計図みたいなニュアンスがあるようです。

僕は悩んだ結果、アメリカ文学の作家をテーマにデータベースを作成してみようと思いました。

これが今回作成するデータベースの内容です。

American Writer(AW)

IDnameBDworks
1Ernest Miller Hemingway1899/7/21The Old Man and the Sea
2Jerome David Salinger1919/1/1The Catcher in the Rye
3Francis Scott Key Fitzgerald1896/9/24The Great Gatsby
4Stephen Edwin King1947/9/21Stand by Me
5Raymond Thornton Chandler1888/7/23The 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句まで一挙紹介

https://www.sejuku.net/blog/82957

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA