Python日記

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

2020年6月28日

MySQL入門講座#3 スキーマから データベース実装 MySQLの テーブル作成

この記事では、MySQLの初心者に向けて、最大限、分かりやすくデータベースの作成をお伝えしていきます。

お悩みさん

MySQLに接続までは分かったけど、スキーマって何?

実際にデータベースを作成する手順を教えて欲しい〜!

こんなお悩みに対して、自分の経験を元に、実際に簡易データベースの完成までを、

順を追って説明していきます。

クリワン

この記事はこんな方におすすめです!

  • ノンプログラマーだけど、SQLを使えるようになりたい
  • マーケティング業務でSQLを使っていきたい
  • ITスキルを身につけて、年収をアップさせたい

この記事で学べること

  1. スキーマ作成の考え方
  2. MySQLのデータベース、テーブル作成
  3. MySQLのレコード作成

環境

OSMac 10.15.4
Pythonpython 3.9
仮想環境Poetry
Homebrew8.0.19 Homebrew

MySQLのダウンロード方法と始め方

「MySQLはまったく触ったこともない!」

という方には、以下の記事で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

初めて作る際は、こんな風にエクセルの表を用意してデータベース化していくのが分かりやすいと思います。

スキーマ作成

念のため、上から順に、ヘミングウェイ、サリンジャー、フィッツジェラルド、スティーブンキング、レイモンドチャンドラー。
アメリカ文学の英雄たちを思いついた順に並べています。笑

初めてのテーブルの作成

データベースの作成

新しく「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」のカラムは省略しましたが、やり方は同じです。

まとめ

この記事で学んだこと

  1. スキーマ作成の考え方
  2. MySQLのデータベース、テーブル作成
  3. MySQLのレコード作成

MySQL入門講座、いかがでしたでしょうか。

細かい説明は省きましたが、

具体的にデータベースをどう作成していけばいいのか、

一通りの流れがわかれば、あとは自由にデータベースを作成していけるはずです。

こんなに簡単なデータベースですが、初めて作成した際は、5時間かかってしまいました。
その際に、テーブルの作成、カラムの追加など、流れで説明されているものが調べた限りなかったので、
ぜひ参考にしていただけたら嬉しいです。

-Python日記
-,