MySQLのPrimary key(主キー)について

MySQLのPrimary key(主キー)について

MySQLにおけるPrimary Key(主キー)は、テーブルの各行を一意に識別するために使用される重要な概念です。
主キーはデータベースの整合性を保ち、重複したデータが存在しないことを保証します。
ここでは、MySQLの主キーについて説明します。

1. 主キーの基本概念

主キーは、テーブル内の各レコード(行)を一意に識別するための列、または複数列で構成されます。
主キーに設定された列は、次の特徴を持ちます。

  • 一意性

主キーに設定された列は、全てのレコードで一意でなければなりません。
同じ値が重複して保存されることはできません。

  • NULL値不可

主キーにはNULL値を設定することはできません。
すべての行に対して必ず値が設定されている必要があります。

例えば、社員テーブルでは、社員IDが主キーとして使われることが一般的です。
この社員IDは、それぞれの社員を一意に識別し、他のレコードと重複しないようにします。

2. 主キーの作成方法

主キーを設定する際には、テーブルの作成時に PRIMARY KEY キーワードを使用します。
以下は、主キーを設定する基本的な方法です。

CREATE TABLE employees (
  employee_id INT NOT NULL,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  PRIMARY KEY (employee_id)
);

この例では、employee_id 列が主キーとして設定されています。
この列には一意のIDが入力され、各レコードを一意に識別します。

また、既存のテーブルに対して主キーを追加することもできます。

ALTER TABLE employees
ADD PRIMARY KEY (employee_id);

このコマンドは、すでに作成された employees テーブルに対して、employee_id 列を主キーとして追加します。

3. 複合主キー

複数の列を組み合わせて主キーを構成することもできます。
これを「複合主キー」と呼びます。
例えば、社員が複数のプロジェクトに参加している場合、employee_id と project_id の2つの列を組み合わせて主キーとすることで、特定の社員が特定のプロジェクトに対して一意のエントリを持つようにすることが可能です。

CREATE TABLE employee_projects (
  employee_id INT NOT NULL,
  project_id INT NOT NULL,
  PRIMARY KEY (employee_id, project_id)
);

この例では、employee_id と project_id の2つの列が複合主キーとなり、それぞれの組み合わせが一意であることを保証します。

4. 自動インクリメントと主キー

多くの場合、主キーは一意の識別子として自動的に番号が付けられることが望まれます。
MySQLでは、AUTO_INCREMENT 属性を使用して、数値型の主キー列に自動的にインクリメントされた値を設定することができます。

CREATE TABLE orders (
  order_id INT NOT NULL AUTO_INCREMENT,
  order_date DATE,
  PRIMARY KEY (order_id)
);

この例では、order_id 列が AUTO_INCREMENT 属性を持っているため、新しいレコードが挿入されるたびに自動的に一意の値が割り当てられます。

5. 主キーの制約とパフォーマンス

主キーはデータベースのパフォーマンスにも影響を与えます。
主キーに設定された列には、自動的にインデックスが作成されます。
これが重要で、インデックスはデータの検索やソートを高速化するために使用されます。
そのため、主キーが適切に設定されていれば、データベースクエリのパフォーマンスが向上します。

ただし、主キーのサイズが大きくなりすぎたり、複合主キーで多くの列を組み合わせたりすると、インデックスのパフォーマンスに悪影響を及ぼす可能性があるため注意が必要です。

6. 主キーの変更と削除

既存のテーブルの主キーを変更したり、削除したりすることもできます。
まず、主キーを削除するには次のようにします。

ALTER TABLE employees
DROP PRIMARY KEY;

主キーを削除した後、新しい主キーを追加する場合には次のコマンドを使用します。

ALTER TABLE employees
ADD PRIMARY KEY (new_column);

まとめ

MySQLにおける主キーは、データの一意性と整合性を保つために欠かせない要素です。
テーブル設計時には、どの列を主キーに設定するかを慎重に検討し、適切な列を選びましょう。
主キーの適切な使用により、データベースのパフォーマンスや管理が大幅に向上します。
また、主キーにはNULL値が許可されないため、常に値が存在する列を選ぶ必要があります。