【问题标题】:Unable to alter table with foreign key无法使用外键更改表
【发布时间】:2016-01-13 01:32:13
【问题描述】:

我的两张空桌子:

CREATE TABLE person (
    person_id SMALLINT UNSIGNED,
    fname VARCHAR(20),
    lname VARCHAR(20),
    gender ENUM('m', 'f'),
    birth_date DATE,
    street VARCHAR(30),
    city VARCHAR(20),
    state VARCHAR(20),
    country VARCHAR(20),
    postal_code VARCHAR(20),
    CONSTRAINT pk_person PRIMARY KEY (person_id)
);

create TABLE favorite_food (
    person_id SMALLINT UNSIGNED,
    food VARCHAR(20),
    CONSTRAINT pk_favorite_food PRIMARY KEY (person_id, food),
    CONSTRAINT fk_fav_food_person_id FOREIGN KEY (person_id) REFERENCES person (person_id)
);

需要修改:

ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;

结果:

错误 1833 (HY000):无法更改列“person_id”:用于 表的外键约束“fk_fav_food_person_id” 'tom.favorite_food'

为什么会这样?有没有办法在不删除表格并重新定义它们的情况下解决这个问题?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    这可能是因为 person.person_id 中已经有任何行中的数据(非空)。您可以通过禁用 foreign key checks

    来规避此问题

    【讨论】:

      【解决方案2】:

      我相信处理这个问题的最好方法是从 favorite_food 中删除外键引用,亲自更改列,然后重新创建外键引用。这将正确地重新创建键所依赖的索引。

      【讨论】:

      • 谢谢你!听起来是解决问题的有效方法。
      猜你喜欢
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 2015-03-09
      • 2013-08-06
      • 2014-02-06
      • 2016-10-25
      • 2013-05-27
      • 2017-09-06
      相关资源
      最近更新 更多