SQL主キー

概要:このチュートリアルでは、主キーとは何か、およびSQL PRIMARY KEY制約を使用してテーブルに主キーを追加する方法について学習します。

SQLにおける主キーとは?

テーブルは列と行で構成されています。通常、テーブルには、テーブル内の各行を一意に識別する値を持つ列または列のセットがあります。この列または列のセットを主キーと呼びます。

2つ以上の列で構成される主キーは、複合主キーとも呼ばれます。

各テーブルには、1つだけ主キーがあります。主キーは、NULL値または重複する値を受け入れません。

次のcoursesテーブルを参照してください

SQL PRIMARY KEY Courses Table

course_id列の値はcoursesテーブルの行を一意に識別するため、course_id列はcoursesテーブルの主キーです。

主キーが2つ以上の列で構成されている場合、ある列では値が重複している可能性がありますが、主キー内のすべての列の値の組み合わせは一意である必要があります。

次のtrainingテーブルを参照してください。

SQL Composite Primary Key Example

trainingテーブルの主キーは、employee_id列とcourse_id列で構成されています。

course_id列の値は重複しています。ただし、employee_id列とcourse_id列の値の組み合わせは重複していません。

主キーを持つテーブルの作成

通常、テーブルを作成するときに主キーを定義します。主キーが1つの列で構成されている場合は、PRIMARY KEY制約を列制約またはテーブル制約として使用できます。主キーが2つ以上の列で構成されている場合は、PRIMARY KEY制約をテーブル制約として使用する必要があります。

データベースで会社のプロジェクトとプロジェクト割り当てを管理するとします。したがって、projectsproject_assignmentsの2つのテーブルを作成する必要があります。

次のステートメントは、projectsテーブルを作成します。

CREATE TABLE projects (
    project_id INT PRIMARY KEY,
    project_name VARCHAR(255),
    start_date DATE NOT NULL,
    end_date DATE NOT NULL
);Code language: SQL (Structured Query Language) (sql)

列定義にPRIMARY KEYを追加して、project_id列をprojectsテーブルの主キーにします。

次のステートメントは上記のステートメントと同等ですが、PRIMARY KEY制約を列制約として使用する代わりに、テーブル制約を使用します。

CREATE TABLE projects (
    project_id INT,
    project_name VARCHAR(255),
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    CONSTRAINT pk_id PRIMARY KEY (project_id)
);Code language: SQL (Structured Query Language) (sql)

CREATE TABLEステートメントの最後にCONSTRAINT句を使用して、project_id列を主キーに昇格させます。

どのプロジェクトに誰が割り当てられたかを表すプロジェクト割り当てを格納するには、次のステートメントを使用してproject_assignmentsテーブルを作成する必要があります。

CREATE TABLE project_assignments (
    project_id INT,
    employee_id INT,
    join_date DATE NOT NULL,
    CONSTRAINT pk_assgn PRIMARY KEY (project_id , employee_id)
);Code language: SQL (Structured Query Language) (sql)

主キーは、project_idemployee_idの2つの列で構成されているため、PRIMARY KEYをテーブル制約として使用する必要があります。

ALTER TABLEステートメントを使用した主キーの追加

最初に、CREATE TABLEステートメントを使用して主キーなしでテーブルを定義できますが、これは良い習慣ではありません。次に、ALTER TABLEステートメントを使用してテーブルに主キーを追加します。

たとえば、次のステートメントは、主キーなしでproject_milestonesテーブルを作成します。project_milestonesは、プロジェクトのマイルストーンを格納します。

CREATE TABLE project_milestones(
    milestone_id INT,
    project_id INT,
    milestone_name VARCHAR(100)
);Code language: SQL (Structured Query Language) (sql)

次に、次のALTER TABLEステートメントを使用して、milestone_id列を主キーとして昇格させることができます。

ALTER TABLE project_milestones
ADD CONSTRAINT pk_milestone_id PRIMARY KEY (milestone_id);Code language: SQL (Structured Query Language) (sql)

次のようにCONSTRAINT句を省略できます。

ALTER TABLE project_milestones
ADD PRIMARY KEY (milestone_id);Code language: SQL (Structured Query Language) (sql)

主キー制約の削除

テーブルの主キーを削除することはめったにありません。ただし、どうしても削除する必要がある場合は、次のようにALTER TABLEステートメントを使用できます。

ALTER TABLE table_name
DROP CONSTRAINT primary_key_constraint;Code language: SQL (Structured Query Language) (sql)

MySQLを使用している場合、主キーを削除するための構文は次のようにより簡単です。

ALTER TABLE table_name
DROP PRIMARY KEY;Code language: SQL (Structured Query Language) (sql)

たとえば、project_milestonesテーブルの主キー制約を削除するには、次のステートメントを使用します。

ALTER TABLE project_milestones 
DROP CONSTRAINT pk_milestone_id;Code language: SQL (Structured Query Language) (sql)

このチュートリアルでは、主キーの概念と、主キーの追加や削除など、テーブルの主キーを管理する方法について学習しました。

このチュートリアルは役に立ちましたか?