MySQL テーブルの主キーを更新する

Mehvish Ashiq 2023年6月20日
  1. MySQL テーブルの主キーを更新する
  2. 既存の主キーを削除し、MySQL の別の列を使用して新しい主キーを作成する
  3. MySQL での主キーの構築に含まれる列数の更新
  4. データ型を変更して MySQL プライマリ キーを更新する
MySQL テーブルの主キーを更新する

このチュートリアルでは、MySQL テーブルの主キーを更新する方法を説明します。 ALTER コマンドを使用して主キーを変更します。

MySQL テーブルの主キーを更新する

MySQL テーブルの 主キー を更新できるさまざまなシナリオがあります。 以下でそれぞれを見てみましょう。

  1. 既存の主キーを削除し、別の列を使用して新しい主キーを作成します。
  2. 主キーの構築に含まれる列の数を更新します。
  3. 主キーのデータ型を変更します。

このチュートリアルの後半で実際にデモを行う ALTER コマンドを使用して、主キーを変更できます。

既存の主キーを削除し、MySQL の別の列を使用して新しい主キーを作成する

test データベースに users テーブルがあり、主キーが ID 属性であるとします。 何らかの理由で、それを削除して、USERNAME 列を使用して新しい主キーを作成したいと考えています。

users テーブルを作成します。

#create a table named 'users' in 'test' database
CREATE TABLE `test`.`users` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `USERNAME` VARCHAR(45) NOT NULL,
  `EMAIL` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`ID`));

次のクエリを使用して、テーブル定義を確認します。

SHOW CREATE TABLE test.users;

次の出力が表示されます。 別のテーブルを使用すると、結果が異なる場合があります。

出力:

mysql テーブルの主キーの更新 - テーブル定義のパート 1

主キーを ID から USERNAME フィールドに更新するには、最初に ID 属性から AUTO_INCREMENT を削除する必要があります。 そうしないと、エラー が生成されます。

ID フィールドの AUTO_INCREMENT を削除します。

# Disable foreign key check
SET FOREIGN_KEY_CHECKS=0;
# Modify the `ID` attribute
ALTER TABLE test.users MODIFY COLUMN ID INT NOT NULL;
# Enable foreign key check
SET FOREIGN_KEY_CHECKS=1;

SHOW CREATE TABLE test.users; を使用します。 AUTO_INCREMENT がドロップされていることを確認します。

出力:

mysql テーブルの主キーの更新 - テーブル定義パート 2

主キーの更新:

ALTER TABLE test.users DROP PRIMARY KEY, ADD PRIMARY KEY(USERNAME);

SHOW CREATE TABLE test.users; を使用します。 主キーが USERNAME であることを確認します。

出力:

mysql テーブルの主キーの更新 - テーブル定義のパート 3

MySQL での主キーの構築に含まれる列数の更新

前のセクションで作成した users テーブルを先に進めます。 主キーは、次のクエリを使用して簡単に確認できる USERNAME 列でした。

SHOW CREATE TABLE test.users;

ALTER コマンドを使用して、IDUSERNAME の 2つの列で構成される主キーを更新します。

ALTER TABLE test.users DROP PRIMARY KEY, ADD PRIMARY KEY(ID, USERNAME);

次のクエリを使用して、更新された主キーを確認できます。

SHOW CREATE TABLE test.users;

出力:

mysql テーブルの主キーの更新 - テーブル定義パート 4

データ型を変更して MySQL プライマリ キーを更新する

ここでは、別のテーブルを作成し、user という名前を付けます。主キーは INT 型の ID フィールドです。

CREATE TABLE `test`.`user` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `USERNAME` VARCHAR(45) NOT NULL,
  `EMAIL` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`ID`));

次のクエリを使用して、既存の主キーのデータ型を INT から BIGINT に更新できます。

SET FOREIGN_KEY_CHECKS=0;
ALTER TABLE test.users MODIFY COLUMN ID BIGINT NOT NULL AUTO_INCREMENT;
SET FOREIGN_KEY_CHECKS=1;

以下に示すクエリを使用して、変更を確認します。

SHOW CREATE TABLE test.user;

出力:

mysql テーブルの主キーの更新 - テーブル定義パート 5

データベースでリレーションシップを作成する前に MySQL テーブルの主キーを更新することは難しくありませんが、データベースでリレーションシップを確立した後は、次の基本的な理由からあまりお勧めできません。

  1. 実行中のデータベースの主キーを変更しようと考えた場合、主キーに間違ったフィールドを選択した可能性があります。 そのため、フィールドを主キーとして選択する際には特に注意してください。

  2. 主キーを変更しようとしているレコードを削除する必要があります。 その特定のレコードのすべての関係を失う必要がある場合があります。

    主キーを変更した場合は、そのレコードを追加して、リレーションシップを再度作成する必要があります。

  3. 主キーを 1 列から 3 列に変更する場合、新しい主キー (3 列で構成される) を他のすべての関連テーブルで外部キーとして使用する必要があります。 これは、ストレージ、パフォーマンス、および設計に影響を与える可能性があることに注意してください。

  4. MIGRATION または FILE RE-ORGANIZATION 中にデータベースを再構築する場合を除き、データベース内で主キーを変更することは推奨されません。 ただし、これらの主キーは他のテーブルの外部キーとして使用される可能性があるため、特に注意する必要があります。

著者: 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