この記事について
| 環境 | 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 以内に収まる。
