MySQLでテーブル作成するときの自分向けのメモ。
以下サンプルなのでテーブルは適当。

目次

  1. サンプル
  2. キー
    1. 複合キー
  3. UNIQUEへのNULL
  4. 現在時刻の設定
  5. boolean型

サンプル

1
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXITSTS `customers` (
`id` int(11) PRIMARY KEY AUTO_INCREMENT NOT NULL COMMENT 'ID'
,`first_name` varchar(30) NOT NULL COMMENT '苗字'
,`last_name` varchar(30) NOT NULL COMMENT '名前'
,`email` varchar(255) NOT NULL UNIQUE DEFAULT '' COMMENT 'メールアドレス'
,`created_at` datetime NOT NULL COMMENT '作成日時'
,`updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新日時'
,`deleted_at` datetime NULL DEFAULT NULL COMMENT '削除日時'
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

キー

作成時にはPRIMARYとUNIQUEを設定できる(はず)
その他のキーは後からALTER TABLEでしか追加できない(はず)

後から追加する場合は次のように書く。

1
2
3
4
5
6
--一行づつ記述する場合。
ALTER TABLE ADD UNIQUE KEY `unique_on_email` (`email`);

--複数キーを一回で追加する場合。
ALTER TABLE ADD KEY (`name`)
,ADD KEY `index_on_email` (`email`);

複合キー

複合キーを作りたい場合はカッコ内で複数のカラムを指定する。

1
ALTER TABLE ADD KEY `multiple_key` (`first_name`,`last_name`,`email`);

UNIQUEへのNULL

UNIQUE指定時にNULL許可可能。その場合、複数の行にNULL挿入は許可される。(NULL本来の意味を考えたらそうか…)

現在時刻の設定

CURRENT_TIMESTAMPを指定することで可能。ただし1テーブルに1カラムのみ(なぜ?)
なので、作成日時に使用するのが一般的と思われる。ちなみ複数カラムに設定しようとすると「Err:1293」で実行できない。

boolean型

booleanはSQL-99では「True」「False」「Unknown」の3つで定義される。
ただ、記憶が正しければbooleanをサポートしているDBはなかったような気がする…(間違ってるかも)

そのため、MySQLではtinyintで「0」のときは「false」それ以外の時は「true」で管理するのが一般的だと思われる。