既に構築したテーブルの主キー列に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;