SQL入門 - 主キーとNULL制約

PRIMARY KEY は2つを同時に守る

行を1本に決めるには、主キー列に NULL も同じ値も許せません。

id INT PRIMARY KEY は、id に NOT NULL と UNIQUE を同時に効かせます。

条件主キー列での約束
NOT NULLすべての行に値が入る
UNIQUE全行を通じて値が重複しない
PRIMARY KEY2つを同時に満たし、行を一意に識別する

1 / 4

変わる値を主⁠キーにしない

メールアドレスのような業務上の値は、あとで変わることがあります。識別だけを担う id を主キーにすると、業務の変更から切り離せます。

自然キー(email など)

業務上の意味を持つ あとで変更されることがある 変更の影響が広がりやすい

サロゲートキー(id)

業務とは無関係な連番・UUID 識別専用として変更しない email の重複は UNIQUE で守る

users では id を PRIMARY KEY、email の重複は UNIQUE で別に守ります。

2 / 4

SQL入門 - 主キーとNULL制約

NULL⁠を許す列、許さない列

NULL は 0 や空文字ではなく、「値が存在しない・不明・該当しない」を表す特別な状態です。

必須か、未登録・未確定の状態を持つかを、列ごとに決めます。

users の列・値設計上の扱い
id / name / email必須:NOT NULL
phone未登録がある:NULL を許す
0 / 空文字 ''値そのもの:NULL ではない

3 / 4

未登録ユーザーだけを取り出す

phone = NULL は TRUE ではなく UNKNOWN になり、WHERE には残りません。NULL を探すときは IS NULL を使います。

SELECT id, name, email, phone
FROM users
WHERE phone IS NULL
phone IS NULL未登録だけを残す
ORDER BY id ASC;
ORDER BY id ASCid の昇順

実行結果

idnameemailphone
2鈴木suzuki@example.comNULL
4高橋takahashi@example.comNULL

2件:id=2、id=4。phone はどちらも NULL です。

ORDER BY id ASC まで書いて、期待される2行の順序を固定します。

4 / 4