因为 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;

参考链接

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-06
  • 2021-07-31
  • 2022-12-23
  • 2021-03-28
猜你喜欢
  • 2021-08-08
  • 2022-12-23
  • 2022-12-23
  • 2021-04-28
  • 2021-12-30
  • 2021-09-27
  • 2022-02-13
相关资源
相似解决方案