ywork2020.com

Title

データテーブルを作成する

目次 (INDEX)

CREATE TABLE とは

ここで説明する CREATE TABLE とは次の語句からなる SQL です。
CREATE
読み: クリエイト
意味: 作成する、創造する
TABLE
読み: テーブル
意味: 表

目次に戻る

CREATE TABLE の概要

このクエリは、データベースにデータテーブルを作成することができます。

テーブルを作成するにあたって、列のデータ型と制約を決める必要があります。 これは、後々のことを考えて決定しなければならない、わりと大変な作業です。 とりあえず、最低でもデータ型だけは決めないと始まりません。もちろん後で変更することができるので 恐れることはないのですが、実際にデータが入ってから変更するのは苦労する場合もありますので、 ある程度はテーブルを作成する時にしっかりとした仕様を考えておいた方が良いかもしれません。

また、列制約も後で追加や削除の変更ができますが、テーブル作成と同時に設定できますので、その辺りのデータも紹介していきます。

データ型と列の制約を一度に説明すると、複雑になって分かりづらいので、このページでは個別のデータでの紹介になります。

目次に戻る

構文

前提として作成されたデータベースが必要です。 まず、データベースを次のクエリで選択します。

USE データベース名;

サンプルを見る前に構文を確認しておきます。

CREATE TABLE テーブル名(カラム名 データ型,カラム名 データ型);
CREATE TABLE テーブル名(
	カラム名 データ型,
	カラム名 データ型
);

上記で2つのコードを紹介しましたが、一行で書いたものと複数行で書いただけの差で同じ内容です。 注意していただきたいのはカラム名とデータ型の間に半角スペースがあるというところです。

目次に戻る

サンプルコードと実行結果

次のクエリを使って実際にテーブルを作成してみました。

CREATE TABLE japan(
	県番号 int(11),
	都道府県 varchar(10),
	県庁所在地 varchar(10),
	地方 varchar(10)
);
作成されたテーブルイメージ
県番号
[整数型]
都道府県
[文字型10バイト以内]
県庁所在地
[文字型10バイト以内]
地方
[文字型10バイト以内]
1北海道札幌市北海道
47沖縄県那覇市沖縄
以下のボタンで実際に作成したテーブルにアクセスできます:

目次に戻る

MySQL で使用できるデータ型

MySQLで使用できるデータ型を下記の表で紹介しておきますので参考にして下さい。 型が多くて迷うこともあると思いますが、格納するデータの大きさで判断することになります。 どの型を使うか検討が必要な場合もありますが、普通に使用するのに無難と思われる型名に マーキングしておきます。

MySQLで使用できる数値型

型名格納できる値の範囲値の範囲UNSIGNEDを付与した場合の範囲
TINYINT
整数型
-128~+1270~+255
SMALLINT
整数型
-32768~+327670~+65535
MEDIUMINT
整数型
-8388608~+83886070~+16777215
INT
整数型
-2147483648~+21474836470~+4294967295
BIGINT
整数型
-9223372036854775808~+92233720368547758070~+18446744073709551615
FLOAT(M.D)
浮動少数型
-3.402823466E+38 ~ -1.175494351E-38,
0,
1.175494351E-38 ~ 3.402823466E+38
負数は使用不可
DOUBLE(M.D)
浮動少数型
-1.7976931348623157E+308 ~ -2.2250738585072014E-308,
0,
2.2250738585072014E-308 ~ 1.7976931348623157E+308
負数は使用不可
DECIMAL(M.D)
固定少数型
(M.D)で変化する利用不可

※データ型に対して 「 UNSIGNED 」 を付与すると、負の値の挿入を許可しません。
※(M.D)では表示桁の指定を行います。Mは総桁数、Dは小数点以下の桁数を指します。
 マイナス記号も一文字としてカウントされるので注意が必要です。
金額など、正確な値を扱う必要がある場合はDECIMAL(固定少数型)を使用して下さい。

目次に戻る

MySQL で使用できる文字型

型名格納できる値の範囲(バイト)挿入に必要なサイズ
CHAR(M)
固定バイト
255Mバイト
VARCHAR(M)
可変バイト
255X+1バイト
TINYBLOB255X+1バイト
BLOB65535X+2バイト
MEDIUMBLOB16777215X+3バイト
LONGBLOB4294967295X+4バイト
TINYTEXT255X+1バイト
TEXT65535X+2バイト
MEDIUMTEXT16777215X+3バイト
LONGTEXT4294967295X+4バイト
ENUM("選択肢1","選択肢2",..)65535 選択肢1~2バイト
SET("選択肢1","選択肢2",..)64選択肢1/2/4/8バイト

通常は CHAR か VARCHAR を使い、長文用のフィールドとして TEXT を使えば良いと思います。

目次に戻る

MySQL で使用できる日付・時刻型

型名フォーマット値の範囲
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-31
TIMEHH:MM:SS-838:59:59 ~ 838:59:59
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 ~ 2037-12-31 23:59:59
YEARYYYY1901 ~ 2155

目次に戻る

CREATE TABLE の列の制約を含む構文

次にテーブルを作成する時に列の制約も含めた形の構文です。

CREATE TABLE テーブル名(カラム名 データ型 列制約,カラム名 データ型);
CREATE TABLE テーブル名(
	カラム名 データ型 列制約,
	カラム名 データ型
);

上記で2つのコードを紹介しましたが、一行で書いたものと複数行で書いただけの差で同じ内容です。 注意していただきたいのはカラム名とデータ型と列制約の各間に半角スペースがあるというところです。

目次に戻る

CREATE TABLE の列の制約を含むサンプルコード

ここでは同ページのカラムのデータ型の部分で作成したテーブルを拡張した形で作成してみます。


CREATE TABLE japan(
	県番号 int(11) PRIMARY KEY,
	都道府県 varchar(10) UNIQUE,
	県庁所在地 varchar(10),
	地方 varchar(10)
);
作成されたテーブルイメージ
県番号
[整数型]
[主キー]
都道府県
[文字型10バイト以内]
[一意性]
県庁所在地
[文字型10バイト以内]
地方
[文字型10バイト以内]
1北海道札幌市北海道
47沖縄県那覇市沖縄

目次に戻る

MySQL で使用できるカラム制約

ここではMySQLで使用できるカラム制約を紹介しておきますので参考にして下さい。

DEFAULT (デフォルト制約)

データ追加の際に値に何も指定しなかった場合に自動挿入される値(初期値)を指定出来ます。
DEFAULT制約で値を明示しない場合はNULLがデフォルト値になります。
データ型の後にDEFAULT句 + 半角スペース + デフォルト値を記述します。

任意のカラム名 データ型 DEFAULT 'デフォルト値'
NOT NULL (ノット ヌル制約)

NULLとは空の値、もしくは無効な値のことです。
NOT NULL制約はカラムにNULL(ヌル)の値が入る事を禁止します。
NOT NULL制約をつけたカラムはデータ挿入の必須項目となり、必ず値を保存しなければいけません。
お問い合わせフォームなどで入力が必須な項目はもとより、基本的にはカラムにNOT NUL制約を付けておくのが望ましいといえます。

任意のカラム名 データ型 NOT NULL
PRIMARY KEY (プライマリーキー制約)

主キー制約とも呼ばれ、ID ナンバー等に使用します。
これは、NOT NULL 制約と UNIQUE 制約を合わせたものです。
その列では空の値と重複した値は認められません。
テーブル設計においてテーブル内に必ず一つ、主キーを設定することは基本原則です。
また、主キーはテーブル内に一つしか設定できません。

任意のカラム名 データ型 PRIMARY KEY
UNIQUE KEY (ユニークキー制約)

UNIQUE は挿入されるデータが一意(重複しない)にする制約です。
PRIMARY KEY と似ていますが、PRIMARY KEY がテーブル内で一つしか設定できないのに対して UNIQUE は複数のカラムに設定することができます。
又、PRIMARY KEY は NULL 値の挿入を許可しませんが、UNIQUE だけでは NULL 値を挿入することができます。
つまり、UNIQUE と NOT NULL を同時に設定すると PRIMARY KEY と同様の効果となります。

任意のカラム名 データ型 UNIQUE
FOREIGN KEY (フォーリンキー制約)

外部キー制約とも呼ばれ別テーブルに保存されているリストデータとの参照整合性を求める制約です。

CREATE TABLE 任意のテーブル名(
	参照元カラム名 データ型,
	FOREIGN KEY(参照元カラム名) REFERENCES 参照先テーブル名(参照先カラム名)
);
FOREIGN KEY の図解サンプル
テーブル1(参照先リストテーブル)
部署ID部署名(参照カラム)
DID-001総務部
DID-002営業部
DID-003製造部

テーブル2(参照元テーブル) FOREIGN KEY(部署ID) REFERENCES テーブル1(部署ID)
社員ID社員名部署ID
EID-00063総務太郎DID-001
EID-00188営業花子DID-002
EID-03055製造次郎DID-003

上記のサンプル [ テーブル2 ] のカラム [ 部署ID ] に 「 DID-004 」 を登録しようとすると [ テーブル1 ] の [ 部署ID ] に同様の値が無い ( 参照出来る値が無い ) のでエラーとして処理されて登録できません。

CHECK (チェック制約)

CHECK は指定した条件を満たす値しかカラムへ登録できなくする制約です。

CREATE TABLE 任意のテーブル名(
	任意のカラム名 データ型 CHECK(任意のカラム名>=0)
);

上記のサンプルコードでは任意のカラムに「0」以上の値しか登録できなくなります。

目次に戻る

SQL の仕様上の注意点

※ SQL の予約句はアルファベットの大文字と小文字を区別しませんが、 任意で作成したデータベースやテーブル、カラムの名前などは区別されるので注意が必要です。

目次に戻る