【mysql】すでにあるカラムにユニークキーやプライマリキーを追加する方法

この記事について

環境mysql
目的すでにあるカラムにユニークキーやプライマリキーを追加する
結果ALTER TABLE ~ ADD PRIMARY KEY / ADD UNIQUE で追加できる

つまずきポイント要約

  • BLOB/TEXT型はキーの長さの指定が必要(255以下)
  • utf8mb4(1文字4バイト)のカラムはキー長255だと「Specified key was too long」→191以下に下げる(4×191=764byte)

すでにあるカラムにユニークキーやプライマリキーを追加するには次のSQL文を実行すればいい。

プライマリキーなら、

mysql> ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名);

ユニークキーなら、

mysql> ALTER TABLE テーブル名 ADD UNIQUE (カラム名);

もし、

ERROR 1170 (42000): BLOB/TEXT column 'text_field' used in key specification without a key length

のようなエラーが出たら、キーの長さを指定する必要があるので、

プライマリキーなら、

mysql> ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名(255以下のキーの長さ));

ユニークキーなら、

mysql> ALTER TABLE テーブル名 ADD UNIQUE (カラム名(255以下のキーの長さ));

こう記述するとエラーにならないはず。

しかし カラムが utf8mb4(一文字4バイト) の物に対してキーの長さを 255 にするとエラーが出る。

Specified key was too long; max key length is 767 bytes
(索引のキーが長すぎます。最大 767 バイトまでです。)

この場合、キー長さを 191 以下に下げればいい。

ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名(191));

4byte × 191 = 764byte

767byte 以内に収まる。

関連記事

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