解决MySQL在修改列时因为外键依赖出错的问题

时间:2021-04-26 12:12:57

因为 favorite_food 中的 person_id 对 person 表中的 person_id 有外键依赖关系,所以在执行

ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;

的时候报错了:

Error Code: 1833. Cannot change column 'person_id': used in a foreign key constraint 'fk_fav_food_person_id' of table 'mydb.favorite_food'

解决办法有两个:

第一种方法

锁定表,然后去除掉外键关联,然后执行上述SQL,然后再添加上外键关联,然后在取消锁定表。

LOCK TABLES
favorite_food WRITE,
person WRITE; ALTER TABLE favorite_food
DROP FOREIGN KEY fk_fav_food_person_id,
MODIFY person_id SMALLINT UNSIGNED; ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT; ALTER TABLE favorite_food
ADD CONSTRAINT fk_fav_food_person_id FOREIGN KEY (person_id)
REFERENCES person (person_id); UNLOCK TABLES;

第二种方法

取消掉系统对外间的检测,使用起来方便,但是请不要轻易使用于实际生产环境。

SET FOREIGN_KEY_CHECKS=0;
ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
SET FOREIGN_KEY_CHECKS=1;

参考链接