これさえ覚えれば基本的なテーブルを作成できる!という内容をまとめています。MySQLをもとにしていますが、あまり他DBでも差分がない内容です。
外部キーや複雑な型などは別記事でまとめる予定です。
目次
CREATE TABLE文法
テーブルの作成は以下のような文法。
CREATE TABLE <テーブル名> (
<カラム名> <データの型> <属性・オプションなど、複数可>,
<カラム名> <データの型> <属性・オプションなど、複数可>,
...
);
すでに作成されていたら何もしない場合は1行目を以下のようにする。
CREATE TABLE IF NOT EXISTS <テーブル名> (
テーブルの具体例
ユーザー情報とユーザー権限のテーブルを例にするとこうなります。
それぞれの属性はこの後説明します。
CREATE TABLE IF NOT EXISTS role (
-- 権限のID
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
-- 権限の名前。adminやゲストなどの値が入る
role_name VARCHAR(20) NOT NULL
);
CREATE TABLE IF NOT EXISTS user (
-- ユーザーのID。自動で付与される
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
-- ユーザー名
name VARCHAR(20) NOT NULL,
-- パスワード
password VARCHAR(256) NOT NULL,
-- データ作成日時
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
-- データ更新日時
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE current_timestamp,
-- ユーザーが持っている権限のID
role_id INT NOT NULL,
-- ユーザーが持っている権限IDを、権限テーブルに紐づける
FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE
);
こんな感じのデータになります。

基本的なデータの型
基本的なデータ型をまとめています。
ENUMやTEXTなどほかのデータ型はいずれ別記事でまとめようと思います。
型名 | 例 | 概要 | データサイズ | 範囲・フォーマット |
INT | – | 整数 | 4バイト | -2147483648 ~ 2147483647 |
FLOAT | – | 浮動小数 | 4バイト | -3.402823466E+38 ~ -1.175494351E-38 |
DECIMAL | DECIMAL(5, 2) | 固定小数点型 固定少数のため正確な制度 | 5~17 | 1つ目の値は全体の桁数(小数部分含む)、2つ目は小数点以下何桁まで表すか。 DICIMAL(5,2)なら小数点以下2桁、整数部3桁の計5桁となる |
DATETIME | 日付と時刻 | 8バイト | 年-月-日 時:分:秒 YYYY-MM-DD hh:mm:ss | |
VARCHAR | VARCHAR(255) | 文字列 | 最大文字数 * 使用している文字コードのバイト数(utf8mb4なら4バイト) | 最大文字数を指定できる。 |
基本的な属性
属性は以下のように1つのカラムに複数設定可能です。
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(20) NOT NULL,
password VARCHAR(256) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
属性名 | 概要 |
PRIMARY KEY | 指定したカラムを主キーに設定する。 主キーはレコードを一意に識別するためのカラムである。 重複、NULLは許容されない。 |
NOT NULL | NULLを許可しないようにする。この指定がない場合は許可された設定になる。 UNIQUE, PRIMARY KEY, INDEXのどれかを指定したカラムはNOT NULLを指定する必要がある。 |
UNIQUE | 値の重複を禁止する。 重複した値を挿入しようとするとエラーが発生する。 |
DEFAULT <デフォルト値> | デフォルト値を設定する。 挿入時に値が指定されていなかった場合、DEFAILTで設定した値が適用される。 |
AUTO_INCREMENT DBによる差分あり | AUTO_INTREMENTを指定すると最大値+1の値を自動で設定されます。 AUTO_INTREMENTを指定できるのは整数型のみです。 MySQLはAUTO_INCREMENTだが、PostgreSQLは SERIALだったり、DBによって違います。 |
他のテーブルとの連携・外部キーについて
別記事でまとめているのでそちらを参照してください。