さて、準備が整ったので、今回は実際にデータベースを作成していきましょう。

データベースの作成

まずは第2回で解説した方法でMySQLを起動してください。次に、画面上で「create database record;」という命令を入力します。「record」は本稿で利用するデータベースの名前です。和訳すると「recordという名前のデータベースを作成せよ」という命令になります。文末の「;(セミコロン)」の入力を忘れないようにしてください。たった一行の短い命令ですが、これでデータベースが作成されました。

mysql> create database record;
Query OK, 1 rows affected (0.00 sec)

データベースが実際に作れているかどうかを確認するには、「show databases; 」を実行します。databasesと複数形で書くように気をつけてください。

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| record              |
+---------------------+
5 rows in set (0.02 sec)

すると、デフォルトのデータベースに加えて、recordというデータベースが作成できていることが確認できます。新たなデータベースをどんどん作ることも可能ですが、ひとつのサービスにひとつのデータベースを作成すれば十分ですので、本稿ではこのデータベースに限定して話を進めていきたいと思います。

テーブルの作成

それでは、第1回で用いた1学期の成績データを整理するために、データベースにテーブルを作成していきましょう。まずは上記で作成したデータベース「record」を使うよう指定します。

mysql> use record;

続いて、テーブルを作成する以下のコマンドを入力します。

mysql> create table first (
    -> id int not null auto_increment primary key,
    -> name varchar(255),
    -> jpn int,
    -> math int,
    -> eng int,
    -> created datetime,
    -> modified datetime
    -> )
    -> ;

はじめに、create tableと書き、その後ろに作成したいテーブル名「first」を書きます。これはデータベース作成のときとまったく同じ要領です。

次に、テーブルのフィールド(=列)を指定するための命令を、フィールド名、データ型、オプションの順番に書いていきます。

フィールド名(id, name, jpnなど)

まず、本テーブルで利用するフィールド名を指定します。idが出席番号、nameが氏名、jpnが国語の得点、mathが数学の得点、engが英語の得点、createdがデータの作成時刻、modifiedがデータの修正時刻を表しています。

データ型(int, varchar, datetimeなど)

次に、データ型を書きます。たとえば、出席番号、国語、数学、英語の得点は整数なので整数型(int)、氏名は文字列なので文字列型(varchar)、データの作成・修正時刻は日付型(datetime)というように、挿入するデータの種類を見極めてデータ型を指定します。

整数型には、下記の表にまとめてあるように5つのデータ型が用意されています。格納したいデータがどれくらいの値を取り得るかを考えたうえでデータ型を指定します。たとえば、INTを利用する場合には、コンピュータに4ビット(=32ビット)分の記憶容量が確保されています。つまり、2の32乗(4294967296)通りの数値を取り扱えるということです。負の値を使う場合には、-2147483648~2147483647の間の数(上段)を、負の値を使わない場合には、0~4294967295の間の数(下段)をテーブルに格納することができます。

整数型の5つのデータ型

整数型は数値型の一部であり、数値型にはほかにも概数値型(FLOAT、REALなど)や真数値型(DECIMAL、NUMERICなど)がありますが、本稿では割愛させていただきます。

文字列型には、char型、varchar型、text型が頻繁に利用されています。name varchar(255)は「nameに255文字格納できる」ということを意味しています。varcher型は必要な文字数分の記憶領域のみを確保する「可変長」のデータ型です。つまり、フィールドに3文字保存された場合は3文字分の記憶領域を、30文字保存された場合は30文字分の記憶領域を確保するということです。

似たデータ型がchar型です。これはあらかじめ指定した文字数分の領域を確保する「固定長」のデータ型です。両者の違いを明確にするために、name varchar(255)ではなく、name char(255)と指定した場合を考えます。「nameに255文字格納できる」という点ではvarchar型と同じです。ただ、char型ではあらかじめ指定した文字数分の記憶領域を確保しているため、フィールドに3文字しか保存されなかった場合でも、残りの252文字以上がスペースで埋め込まれてしまいます。

したがって、入力データの長さがある程度定まる場合(例:都道府県、8桁のパスワードなど)にはchar型を、定まらない場合(例:メールアドレスなど)にはvarchar型を使うことをおすすめします。

また、お問い合わせフォームなどのように、255文字を越える可能性の高い場合には、text型を用いる場合がほとんどです。

データ型 利用場面
char 文字列の長さが定まる場合(例:都道府県、8桁のパスワードなど)
varchar 文字列の長さが定まらない場合(例:メールアドレスなど)
text 文字列の長さが十分に長い場合(例:お問い合わせフォームなど)

オプション

データ型の後ろにはオプションを書きます。idの後ろに付いている「int not null auto_increment primary key」は、「idのデータ型は整数型(int)で明確なデータが入っていなければならず(not null)、自動連番で(auto_increment)主キーであること(primary key)」という制限を与えます。4章で詳しく見ていきますが、これはidには1から順番に整数が自動的にかつ重複なく入力されていくことを意味します。

テーブルの作成に成功すると、以下のメッセージが表示されます。

Query OK, 1 rows affected (0.02 sec)

データベース内にあるテーブルの種類を確認するには、「show tables; 」と入力します。テーブル「first」ができていることがわかります。

mysql> show tables;
+---------------------+
| Tables_in_record    |
+---------------------+
| first               |
+---------------------+
1 row in set (0.00 sec)

また、テーブルの構造を忘れたときには、「desc first;」と入力することで調べることができます。

mysql> desc first;
+-----------------------------------------------------------------+
| Field    | Type         | Null | Key | Default | Extra          |
+-----------------------------------------------------------------+
| id       | int          | NO   | PRI | NULL    | auto_increment |
| name     | varchar(255) | YES  |     | NULL    |                |
| jpn      | int          | YES  |     | NULL    |                |
| math     | int          | YES  |     | NULL    |                |
| eng      | int          | YES  |     | NULL    |                |
| created  | datetime     | YES  |     | NULL    |                |
| modified | datetime     | YES  |     | NULL    |                |
+-----------------------------------------------------------------+
7 rows in set (0.00 sec)
執筆者紹介

RShibato

ITベンチャー企業の経営者。自社のWebサービスの開発・運営に携わりつつ、科学技術に関する書評や解説記事などの執筆活動も行っている。