主キーを MySQL テーブルに追加する

Mehvish Ashiq 2023年6月20日
  1. 主キーを MySQL テーブルに追加する
  2. CREATE TABLE を使用して MySQL に主キーを追加する
  3. ALTER TABLE を使用して MySQL に主キーを追加する
主キーを MySQL テーブルに追加する

この記事では、CREATE TABLE および ALTER TABLE ステートメントを使用して MySQL テーブルに主キーを追加する方法を紹介します。

主キーを MySQL テーブルに追加する

主キー を追加する前に、次のルールを守ることが重要です。

  1. 主キー フィールドの値は一意である必要があります。
  2. 主キーの作成に使用される列を空または NULL にすることはできません。
  3. MySQL サーバーは、既存の主キーを持つ新しいレコードを挿入しません。
  4. テーブルには 1つの主キーのみが許可されます。

CREATE TABLE ステートメントまたは ALTER TABLE ステートメントを使用して主キーを作成できます。 以下で両方を見てみましょう。

CREATE TABLE を使用して MySQL に主キーを追加する

通常、テーブルの作成時に主キーを作成します。 主キーに単一の列がある場合は、次の方法が推奨されます。

フィールド (列) 制約として主キー制約を使用します。

コード例:

CREATE TABLE students(
	ID INT NOT NULL PRIMARY KEY,
    STUDENT_NAME VARCHAR(50) NOT NULL
);

次のステートメントを使用して、主キーが確実に作成されるようにします。

DESCRIBE students;
# Alternatively, we can write as given below
DESC students;

出力:

+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| ID           | int         | NO   | PRI | NULL    |       |
| STUDENT_NAME | varchar(50) | NO   |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
2 rows in set (0.04 sec)

上記の出力では、Key 列の下の PRI は、Field 列のそれぞれの値が主キーの作成に使用されていることを示しています。

複数の列を使用して主キーを作成するとします。 次に、以下のようにそれを行うことができます。

コード例:

CREATE TABLE courses(
	COURSE_ID INT NOT NULL,
    STUDENT_ID INT NOT NULL,
    COURSE_NAME VARCHAR(50) NOT NULL,
    CONSTRAINT PK_STUDENT_COURSE
   	PRIMARY KEY (COURSE_ID,STUDENT_ID)
);

DESCRIBE ステートメントを使用して、主キーが作成されているかどうかを確認します。

DESCRIBE courses

出力:

+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| COURSE_ID   | int         | NO   | PRI | NULL    |       |
| STUDENT_ID  | int         | NO   | PRI | NULL    |       |
| COURSE_NAME | varchar(50) | NO   |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
3 rows in set (0.43 sec)

Key 列に 2つの PRI 値が表示されます。これは、COURSE_IDSTUDENT_ID が主キーとして使用されていることを意味します。

コンマ (,) で区切られた複数の列が含まれる場合は、主キー 制約 をテーブル (関係) 制約として使用する必要がありますが、単一の列でも使用できます。 次のクエリを参照してください。

コード例:

CREATE TABLE students(
	ID INT NOT NULL,
    STUDENT_NAME VARCHAR(50) NOT NULL,
    PRIMARY KEY(ID)
);

主キーには列が 1つしかありませんが、主キー制約をテーブル制約として使用していることに注意してください。 テーブル レベルの制約と列レベルの制約の違いについては こちら を参照してください。

ALTER TABLE を使用して MySQL に主キーを追加する

テーブルを作成した後、冗長性を避けるために、テーブル内の特定の列を主キーにする必要があることに気付きました。 その場合、ALTER TABLE ステートメントを使用します。

テーブルに主キーが含まれていない場合、このステートメントを使用すると、既存のテーブルの列に対する主キーを変更および作成できます。 IDFULLNAME を列として持つ person テーブルがあるとします。

コード例:

# Create a table without a primary key
CREATE TABLE person(
	ID INT NOT NULL,
    FULLNAME VARCHAR(50) NOT NULL
);

# Describe `person` table
DESCRIBE person;

出力:

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int         | NO   |     | NULL    |       |
| FULLNAME | varchar(50) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.07 sec)

上記の出力には主キーがありません。 これで、以下に示すように ALTER TABLE ステートメントを使用して、目的の列に主キーを作成できます。

コード例:

ALTER TABLE person ADD PRIMARY KEY(ID);

主キーの作成に使用されるフィールドには一意の値が必要であり、NULL または空を含めないでください。 ここで、DESCRIBE ステートメントを使用して、主キーが正常に作成されたことを確認します。

コード例:

DESCRIBE person;

出力:

+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| ID       | int         | NO   | PRI | NULL    |       |
| FULLNAME | varchar(50) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.07 sec)
著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - MySQL Key