引き続き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
コマンドでデータベース内のテーブルの一覧を確認できる