我的两个空表:
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'
为什么会出现这种情况并且没有丢弃表并重新定义它们?
答案 0 :(得分:1)
这可能是因为任何行中的person.person_id中都有数据(NOT NULL)。您可以通过禁用foreign key checks
来规避这一点答案 1 :(得分:1)
我认为处理此问题的最佳方法是从favorite_food中删除外键引用,亲自更改列,然后重新创建外键引用。这将正确地重新创建密钥所依赖的索引。