2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

外部キーとして参照されている列にauto_incrementをつけ忘れた時の解決法

Posted at

既に構築したテーブルの主キー列にAUTO_INCREMENTをつけ忘れていた。
後からAUTO_INCREMENTを付与したい状況。
しかし、列が他のテーブルから外部キー制約で参照されていると、単純にALTER TABLEしようとしても以下のようなエラーが発生する。

*親テーブル:employee_info
*子テーブル:employee_state
*AUTO_INCREMENTを付与したい列:employee_id

Error Code: 1833. Cannot change column 'employee_id': used in a foreign key constraint 'employee_state_ibfk_1' of table 'management.employee_state'

対処法
・関連テーブルのWRITEロック
・子テーブルの外部キー制約を一時的に削除
・ALTER TABLEで親テーブルの列にAUTO_INCREMENTを追加
・外部キー制約を戻す(子テーブルにもう一度外部キー制約をつけ直す)
・テーブルをアンロック

LOCK TABLES employee_info WRITE, employee_state WRITE;

ALTER TABLE employee_state DROP FOREIGN KEY employee_state_ibfk_1;

ALTER TABLE employee_info MODIFY employee_id INT AUTO_INCREMENT;

ALTER TABLE employee_state ADD FOREIGN KEY(employee_state_ibfk_1) 
REFERENCES employee_info(employee_id);

UNLOCK TABLES;

結果、無事にAUTO_INCREMENTを付与できました!

SHOW COLUMNS FROM employee_info;

2020-09-09 9.42.27.png

●参照
https://unk-pizza.hatenadiary.org/entry/20170530/p1

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?