MySQL テーブルの主キーを更新する
- MySQL テーブルの主キーを更新する
- 既存の主キーを削除し、MySQL の別の列を使用して新しい主キーを作成する
- MySQL での主キーの構築に含まれる列数の更新
- データ型を変更して MySQL プライマリ キーを更新する
このチュートリアルでは、MySQL テーブルの主キーを更新する方法を説明します。 ALTER
コマンドを使用して主キーを変更します。
MySQL テーブルの主キーを更新する
MySQL テーブルの 主キー を更新できるさまざまなシナリオがあります。 以下でそれぞれを見てみましょう。
- 既存の主キーを削除し、別の列を使用して新しい主キーを作成します。
- 主キーの構築に含まれる列の数を更新します。
- 主キーのデータ型を変更します。
このチュートリアルの後半で実際にデモを行う 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;
次の出力が表示されます。 別のテーブルを使用すると、結果が異なる場合があります。
出力:
主キーを 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
がドロップされていることを確認します。
出力:
主キーの更新:
ALTER TABLE test.users DROP PRIMARY KEY, ADD PRIMARY KEY(USERNAME);
SHOW CREATE TABLE test.users;
を使用します。 主キーが USERNAME
であることを確認します。
出力:
MySQL での主キーの構築に含まれる列数の更新
前のセクションで作成した users
テーブルを先に進めます。 主キーは、次のクエリを使用して簡単に確認できる USERNAME
列でした。
SHOW CREATE TABLE test.users;
ALTER
コマンドを使用して、ID
と USERNAME
の 2つの列で構成される主キーを更新します。
ALTER TABLE test.users DROP PRIMARY KEY, ADD PRIMARY KEY(ID, USERNAME);
次のクエリを使用して、更新された主キーを確認できます。
SHOW CREATE TABLE test.users;
出力:
データ型を変更して 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 テーブルの主キーを更新することは難しくありませんが、データベースでリレーションシップを確立した後は、次の基本的な理由からあまりお勧めできません。
-
実行中のデータベースの主キーを変更しようと考えた場合、主キーに間違ったフィールドを選択した可能性があります。 そのため、フィールドを主キーとして選択する際には特に注意してください。
-
主キーを変更しようとしているレコードを削除する必要があります。 その特定のレコードのすべての関係を失う必要がある場合があります。
主キーを変更した場合は、そのレコードを追加して、リレーションシップを再度作成する必要があります。
-
主キーを 1 列から 3 列に変更する場合、新しい主キー (3 列で構成される) を他のすべての関連テーブルで外部キーとして使用する必要があります。 これは、ストレージ、パフォーマンス、および設計に影響を与える可能性があることに注意してください。
-
MIGRATION または FILE RE-ORGANIZATION 中にデータベースを再構築する場合を除き、データベース内で主キーを変更することは推奨されません。 ただし、これらの主キーは他のテーブルの外部キーとして使用される可能性があるため、特に注意する必要があります。