无法使用外键更改表

时间:2016-01-13 01:32:13

标签: mysql

我的两个空表:

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;

结果:

  

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

为什么会出现这种情况并且没有丢弃表并重新定义它们?

2 个答案:

答案 0 :(得分:1)

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

来规避这一点

答案 1 :(得分:1)

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