解决MySQL在修改列时因为外键依赖出错的问题
因为 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;