引き続きSQLの学習を進めていきましょう。ここまでで eldb データベースの作成と接続が完了したので、MySQLクライアントプログラムは次のように表示されているでしょう。

MariaDB [eldb]> 

これから学習していくように eldb データベース上に複数のテーブルを作成できます。まずは categories テーブルを作成してみましょう。

SQLでテーブルを作成するには create table 文を記述します。

create table categories(
  id integer primary key,
  title varchar(100)
);

create table 文は次のような構文になります。

create table テーブル名(
  列名 データ型 制約,
  ...
);

この構文とさきほどのSQL文を比べると次のように整理できるでしょう。

列名(論理名) 列名(物理名) データ型 制約
ID id 整数型 プライマリキー制約
タイトル title 文字型(100bytes)

上記の表では、列名については論理名と物理名の2つに分けています。これは開発現場でもよく用いる方法で、システム開発の関係者間でコミュニケーションをとる上での呼び名を列名(論理名)、プログラム上で実装する名前を列名(物理名)としています。

またデータ型については、テーブルに格納するデータに合わせて指定します。たとえば数値データを格納する場合は integer 型、文字データを格納する場合は varchar 型 という具合です。また varchar 型は格納するデータの最大バイト数を () の中に記述します。

MySQLの主要なデータ型は以下のとおりです。

データ型 意味
integer 整数
double 浮動小数点数
char 固定長文字列
varchar 可変長文字列
date 日付
datetime 日時
blob ラージオブジェクト(バイナリ)
text ラージオブジェクト(テキスト)

まずは整数型の integer と 可変長文字列型の varchar 型 の使い方に慣れていきましょう。また integer 型や varchar 型など、データ型の名前はデータベースプロダクトによって異なるので注意してください。

また create table 文においてテーブルを作成する際に制約を定義できます。制約とはテーブルに格納するデータのルールのようなものです。たとえばさきほどのSQLのように id integer primary key と指定した場合、整数型の id 列は主キー制約(primary key制約)に従うという意味になります。

主キー制約(primary key制約)を定義した列は、その値が重複することは許されず、また空データは許可しない、という意味になります。

テーブルに定義可能な制約について、主要なものは以下のとおりです。

制約 意味
主キー制約 値の重複やnull値を許可しない。テーブルに1つだけ定義できる
NOT NULL制約 null値を許可しない
ユニークキー制約 値の重複を許可しない
チェック制約 指定した条件に違反したものを許可しない
デフォルト制約 null値が与えられた場合のデフォルト値を定義する
参照整合性制約 参照先のテーブルの関連を保証する

制約については主キー制約やNOT NULL制約など単純なものから確認していきましょう。

それでは実際にMySQL上で categories テーブルを作成してみましょう。

MariaDB [eldb]> create table categories(
    ->   id integer primary key,
    ->   title varchar(100)
    -> );
Query OK, 0 rows affected (0.07 sec)

MariaDB [eldb]> 

上記のように Query OK と出力されればSQLの実行は完了です。

SQLが複数行になる場合は、テキストエディタ上で先にSQLを記述してコピーアンドペーストすると良いでしょう。

テーブルの確認

現在接続しているデータベース( eldb )上に存在するテーブルの一覧を確認するには show tables コマンドを入力します。

MariaDB [eldb]> show tables;
+-----------------+
| Tables_in_eldb |
+-----------------+
| categories      |
+-----------------+
1 row in set (0.01 sec)

MariaDB [eldb]> 

上記のようにデータベース上に存在するテーブルの一覧を確認できます。

また desc コマンドを使うとテーブルの定義情報を確認できます。

MariaDB [eldb]> desc categories;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | NO   | PRI | NULL    |       |
| title | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

MariaDB [eldb]> 

上記の結果から categories テーブルの定義情報(列名やデータ型など)を確認できます。

テーブルの削除

一般的にテーブルは一度作成したら、その後は長期に渡って利用し続けます。開発しているシステムに仕様変更が発生すると、既存のテーブルに列を追加したり、制約を追加したり、あるいはテーブルそのものを削除したりすることもあるでしょう。ここではテーブルを削除するためのSQLである drop table 文を紹介します。

drop table categories;

上記のSQLは categories テーブルを削除するという意味になります。drop table 文は次のような構文になります。

drop table テーブル名;

他にもテーブル定義を変更する alter table 文も存在します。 create table 文に加えて利用頻度は少ないので解説は省略します。

それでは実際にMySQLクライアントプログラムから categories テーブルの削除を試してみましょう。

MariaDB [eldb]> drop table categories;
Query OK, 0 rows affected (0.01 sec)

MariaDB [eldb]> 

上記のように Query OK というメッセージが確認できればSQLは正しく処理されています。

念のため show tables コマンドで結果を確認しておきましょう。

MariaDB [eldb]> show tables;
Empty set (0.00 sec)

MariaDB [eldb]> 

さきほどまで表示されていた categories テーブルが削除されているのがわかります。

テーブルの削除方法について確認ができたので、後の学習を進めるために、あらためて categories テーブルを作成しておきましょう。

MariaDB [eldb]> create table categories(
    ->   id integer primary key,
    ->   title varchar(100)
    -> );
Query OK, 0 rows affected (0.07 sec)

MariaDB [eldb]> 

それから show tables コマンドでデータベース上のテーブル一覧を確認しておきましょう。

MariaDB [eldb]> show tables;
+-----------------+
| Tables_in_eldb |
+-----------------+
| categories      |
+-----------------+
1 row in set (0.01 sec)

MariaDB [eldb]> 

以上でテーブルの作成は完了です。次はテーブルの中にレコードを作成する方法をみていきましょう。

まとめ

  • データベース上にテーブルを作成するには create table 文を使う
  • データベース上のテーブルを削除するには drop table 文を使う
  • show tables コマンドでデータベース内のテーブルの一覧を確認できる