データベースのデータ型と制約
本記事は Progate の動画講義「データベース」を参考にしています。
データ型
- エンティティの属性ごとに決める
- 値がとりうる範囲のこと
注意点
後から変更することもできるがALTER TABLE
処理は重くなりがちなので、あらかじめきちんと設計しておく。
データ型の種類
数値データ型
型名 | 範囲 | サイズ | 備考 |
---|---|---|---|
TINYINT | -128 ~ 127 / 0 ~ 255 | 1 byte | |
INT | TINYINTより大きな数値 | 4 byte | IDに使うには足りないこともある |
BIGINT | INTよりも大きな数値 | 8 byte |
※ この他にも少数やビット値を扱う型がある。
日付データ型
型名 | 内容 | 範囲 |
---|---|---|
DATE | 日付のみ |
'1000-01-01' ~ '9999-12-31'
|
DATETIME | 日付+時間 |
'1000-01-01 00:00:00' ~ '9999-12-31'
|
TIMESTAMP | タイムゾーンを扱える型 | - |
文字列データ型
型名 | 特徴 | 長さ | 備考 |
---|---|---|---|
VARCHAR | 可変長:文字列の長さに応じて容量を確保 | 0 ~ 65535文字 | |
CHAR | 固定長:長さに関係なく容量を確保 | 0 ~ 255文字 | 郵便番号などに適している |
TEXT系 | 長文データ用(MEDIUMTEXT / LONGTEXTなど) | - | VARCHARで収まらない長さにも対応 |
制約
- データの整合性を保つための仕組み
- 制約に違反したクエリを実行すると、DBがエラーを返す
制約の種類
主キー(PRIMARY KEY
)制約
- 一意であることを保証
-
NULL
を禁止 - 1テーブルに1つだけ設定可能
NOT NULL(NOT NULL
) 制約
-
NULL
でないことを保証
ユニークキー(UNIQUE KEY
)制約
- 一意であることを保証
- 主キーと異なり、複数のカラムに設定可能
外部キー(FOREIGN KEY
)制約
- 参照先のレコードが存在することを保証
データ型・制約を定義する方法(SQL)
CREATE TABLE Users (
id INT PRIMARY KEY, -- 整数型、主キー
username VARCHAR(50), -- 最大50文字の文字列
email VARCHAR(100) UNIQUE, -- 一意の文字列
birth_date DATE, -- 日付型
is_active BOOLEAN, -- 真偽値型
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- タイムスタンプ型、デフォルト値
);