SQL初心者でもわかる!Primary KeyとUnique Indexを使いこなしてデータの整合性を保つ方法
SQLデータベースにおける「Primary Key」と「Unique Index」の違い
データベース設計において、重複レコードを防ぎ、データの整合性を保つために、Primary KeyとUnique Indexという2つの制約が使用されます。一見似ているように見えますが、それぞれ異なる役割と機能を持っています。
Primary Key
- 概要
テーブル内で唯一無二の値を持つ列を指定します。レコードを識別するためのキーとして機能します。
-
特徴
- 1つのテーブルに1つのみ設定できます。
- NULL値を許容しません。
- データベースエンジンによって、自動的にインデックスが作成されます。
1つの列または複数の列の組み合わせにおいて、重複値を許容しない制約を設けます。
-
- インデックスの作成はオプションです。
比較表
項目 | Primary Key | Unique Index |
---|---|---|
役割 | レコードの識別 | 重複防止 |
設定数 | 1つのみ | 複数可 |
NULL値 | 不可 | 可 |
インデックス | 自動作成 | オプション |
例
-
社員テーブル
- Unique Index: 氏名、メールアドレス
設計時の考慮事項
- データの性質: 重複可能性、一意性の要件
- 検索頻度: 検索キーとして使用する頻度
- パフォーマンス: インデックスによる処理速度への影響
補足
- 上記は一般的な説明であり、データベース製品によって詳細な仕様は異なる場合があります。
- 詳細については、使用するデータベース製品のドキュメントを参照してください。
-- テーブル作成
CREATE TABLE employees (
employee_id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE
);
-- データ挿入
INSERT INTO employees (first_name, last_name, email) VALUES
('John', 'Doe', '[email protected]'),
('Jane', 'Doe', '[email protected]'),
('John', 'Smith', '[email protected]');
-- 重複レコード挿入エラー
INSERT INTO employees (first_name, last_name, email) VALUES
('John', 'Doe', '[email protected]');
-- エラーメッセージ: ERROR 1062 (23000): Duplicate entry '[email protected]' for key 'email'
-- 一意キーによる検索
SELECT * FROM employees WHERE email = '[email protected]';
employees
テーブルを作成します。employee_id
列をPRIMARY KEY
として設定し、自動的に値が増加するようにします。first_name
、last_name
列はNOT NULL
制約を設定し、NULL値を許容しません。email
列にUNIQUE
制約を設定し、重複値を許容しません。
- データを挿入します。
email
列をキーとして検索を行います。
- 上記はMySQLの例です。他のデータベース製品では、構文が異なる場合があります。
sql database database-design