MySQLの主キーについてのまとめ(設定/追加/削除/変更)

MySQL MySQL

MySQLの主キーについてまとめています。
最初にテーブルに主キーを設定する方法について書いていて、その後に追加・削除・変更する方法について書きました。

載せているSQLはMySQLのバージョン8.0.15で確認しました。

主キーとは?設定する方法!

MySQLの主キーはテーブルに設定することで、一意の値しか入れることができないカラムになります。

INSERT文やUPDATE文で、重複する値を設定しようとするとエラーになります。
また、NULLを設定することもできません。

テーブルごとにつけるIDなど、重複なしの一意にしたいカラムに設定します。

MySQLのテーブルに主キーを設定する

例えば、下記のようにして、テーブルに主キーを設定することができます。

CREATE TABLE fruits (
  id BIGINT AUTO_INCREMENT,
  name VARCHAR(128),
  color VARCHAR(128),
  price INT,
  PRIMARY KEY (id)
);

CREATE TABLEでfruitsテーブルを作成しています。
カラムとして「id・name・color・price」を持っています。

カラムの定義を書いた後に、PRIMARY KEYというキーワードで指定しているのが主キーになります。
丸括弧(())の中に主キーにしたいカラムを書きます。

今回は「id」を指定しているので、idが主キーです。

主キーが設定されているか確認する

DESCを使ってテーブル構造をみると、主キーが付いているか確認できます。
例えば、下記のように使います。

> DESC fruits;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| name  | varchar(128) | YES  |     | NULL    |                |
| color | varchar(128) | YES  |     | NULL    |                |
| price | int(11)      | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

DESCの後にテーブル名を書きます。
idカラムのKey列にPRIが設定されているので、主キーということが確認できました。

MySQLで主キーを後から追加する

ALTER TABLEを使うことで、主キーを後から追加することができます。
例えば、下記のSQLで主キーの付いていないテーブルを作成します。

CREATE TABLE fruits (
  id BIGINT,
  name VARCHAR(128),
  color VARCHAR(128),
  price INT
);

このfruitsテーブルに対して、主キーをつけるには下記のようにSQLを実行します。

ALTER TABLE fruits ADD PRIMARY KEY (id);

ALTER TABLEの後にテーブル名を書きます。
その後にADD PRIMARY KEYで指定した、idが主キーとして設定されます。

MySQLで主キーを削除する

DROP PRIMARY KEYを使うことで、主キーを削除することができます。
例えば、下記のように使うことができます。

ALTER TABLE fruits DROP PRIMARY KEY;

これでfruitsテーブルに付いている主キーが削除されます。

だだしNOT NULL制約はついたままになるので、NULL許可したい場合には、再度ALTER TABLEでNULLを許可しておきましょう。
上記のテーブルの場合は、このようにすることで、元のNULL許可に戻せます。

ALTER TABLE fruits MODIFY COLUMN id BIGINT;

MySQLで主キーを変更するには?

主キーを変更するには一度削除して、付けなおす必要があるようです。
下記のように1行で行うこともできます。

ALTER TABLE fruits DROP PRIMARY KEY, ADD PRIMARY KEY (name);

実行すると、fruitsテーブルの主キーを削除して、nameカラムを主キーにしてくれます。
ただし、こちらも元の主キーをつけていたカラムはNOT NULL制約がついたままになるので気を付けてください。

MySQLの主キーについてまとめ

今回はMySQLの主キーについて、まとめてみました。
記事の内容をまとめると、下記のようになります。

・PRIMARY KEYでテーブル作成時に主キーを設定できた。
・`ALTER TABLE [テーブル名] ADD PRIMARY KEY(カラム名)`で後から追加できた。
・`ALTER TABLE [テーブル名] DROP PRIMARY KEY`で主キーを削除できた。
・主キーを変更するには削除して、付け直す必要があった。
・主キーを一度つけたら、削除してもNOT NULL制約がついたままなので気を付ける。

コメント

タイトルとURLをコピーしました