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の主キーについて、まとめてみました。
記事の内容をまとめると、下記のようになります。
・`ALTER TABLE [テーブル名] ADD PRIMARY KEY(カラム名)`で後から追加できた。
・`ALTER TABLE [テーブル名] DROP PRIMARY KEY`で主キーを削除できた。
・主キーを変更するには削除して、付け直す必要があった。
・主キーを一度つけたら、削除してもNOT NULL制約がついたままなので気を付ける。
コメント