zoukankan      html  css  js  c++  java
  • 解决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;
    

    参考链接

  • 相关阅读:
    BZOJ 3196 二逼平衡树
    BZOJ 4241 历史研究
    Problem 71:Ordered fractions
    矿工安全生产
    Codeforces 771C:Bear and Tree Jumps
    Problem 77:Prime summations
    Problem 69:Totient maximum
    关于Euclid算法
    团体程序设计天梯赛-练习集
    埃蒙的时空航道
  • 原文地址:https://www.cnblogs.com/zifeiy/p/8778763.html
Copyright © 2011-2022 走看看