初学者
主キーとunique制約はどっちも一意性を保証するけど、使い分けがわからん
主キー(PRIMARY KEY)と UNIQUE 制約があります。一意性を保証する点では同じですが、異なる目的と特性を持っています。
※一意性:テーブル内で特定の値が列内で他と重複しない、唯一の値である性質のこと
覚え方:一意性を持たせる目的が違う
- 主キー:レコードを特定することが第一目標で、その達成のため一意性が必要となる
- UNIQUE制約:重複があり得ない値を管理・保存して整合性・一貫性を保つことが目標。その達成の手段
主キー(PRIMARY KEY)について
レコードの識別子としての役割を持ちます。主キーを1つ指定すれば、その値をもつ1行のレコードが必ず指定できます。
- 一意性を保証します。
- NULL値を許容しません。
- テーブルごとに1つだけ設定可能
- コードやIDが格納されるべき
用途例
社員ID, ユーザIDなどのユニークなIDやコードを主キーとして利用することが多いです。
UNIQUE制約について
UNIQUE制約がある列には、同じ値は絶対に入りません。
ただし、NULLの場合は複数個登録することが可能であることに注意が必要です。
- 1つのテーブル内で重複を防ぐことができる
- NULL値を許容する。ただし、複数の
NULL
値が存在してもエラーにはならない - 複数の
UNIQUE
制約を設定可能
用途
メールアドレスや電話番号、ユーザ名などを設定することが多いです。ユーザーごとに一意である必要がありますが、IDやコードでないので主キーには不適切な値と言えます。
設定方法
テーブル生成時の設定方法
CREATE TABLE users (
id INT PRIMARY KEY, // 主キー
email VARCHAR(255) UNIQUE // unique制約
);
後からUNIQUE制約をつけたい場合
ALTER TABLE users
ADD UNIQUE (email); //unique制約をつけたい列名を指定
まとめ
主キーはテーブルの中でその行を一意に識別するための中心的な要素であり、UNIQUE
制約はそれ以外の列における一意性の保証を目的とします。