SQL入門 - 主キーとNULL制約
行を1本に決めるには、主キー列に NULL も同じ値も許せません。
id INT PRIMARY KEY は、id に NOT NULL と UNIQUE を同時に効かせます。
| 条件 | 主キー列での約束 |
|---|---|
| NOT NULL | すべての行に値が入る |
| UNIQUE | 全行を通じて値が重複しない |
| PRIMARY KEY | 2つを同時に満たし、行を一意に識別する |
1 / 4
メールアドレスのような業務上の値は、あとで変わることがあります。識別だけを担う id を主キーにすると、業務の変更から切り離せます。
自然キー(email など)
業務上の意味を持つ あとで変更されることがある 変更の影響が広がりやすい
サロゲートキー(id)
業務とは無関係な連番・UUID 識別専用として変更しない email の重複は UNIQUE で守る
users では id を PRIMARY KEY、email の重複は UNIQUE で別に守ります。
2 / 4
SQL入門 - 主キーとNULL制約
NULL は 0 や空文字ではなく、「値が存在しない・不明・該当しない」を表す特別な状態です。
必須か、未登録・未確定の状態を持つかを、列ごとに決めます。
| users の列・値 | 設計上の扱い |
|---|---|
| id / name / email | 必須:NOT NULL |
| phone | 未登録がある:NULL を許す |
| 0 / 空文字 '' | 値そのもの:NULL ではない |
3 / 4
phone = NULL は TRUE ではなく UNKNOWN になり、WHERE には残りません。NULL を探すときは IS NULL を使います。
phone IS NULL未登録だけを残すORDER BY id ASCid の昇順実行結果
| id | name | phone | |
|---|---|---|---|
| 2 | 鈴木 | suzuki@example.com | NULL |
| 4 | 高橋 | takahashi@example.com | NULL |
2件:id=2、id=4。phone はどちらも NULL です。
ORDER BY id ASC まで書いて、期待される2行の順序を固定します。
4 / 4