当前位置: 首页 > 知识库问答 >
问题:

无法使用外键更改表

晏兴发
2023-03-14

我的两张空桌子:

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)
);

需要修改:

更改表人修改person_id小无符号AUTO_INCREMENT;

结果:

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

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

共有2个答案

伯建安
2023-03-14

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

张建树
2023-03-14

这可能是因为已经有数据了。任何行中的person_id(非空)。您可以通过禁用外键检查来规避此问题

 类似资料:
  • 问题内容: 尝试更改表时出现此错误。 这是我成功运行的CREATE TABLE STATEMENT。 然后,我尝试执行此语句,但出现了以上错误。 问题答案: 外键字段和引用的类型和定义必须相同。这意味着您的外键不允许更改字段的类型。 一种解决方案是: 现在您可以更改您的person_id 重新创建外键 编辑: 上面添加了锁,感谢评论 在执行此操作时,您必须禁止写入数据库,否则可能会冒数据完整性问题

  • 问题内容: 这是一个非常基本的问题,但是我正在尝试使用以下方法更改node.js / Express应用程序的图标 而且我仍在使用默认图标。这是在我的功能,是的,我已经验证,有 是 一个在。还有的约没有在控制台中,要么,我相信这线索,这行代码被忽略。函数中的其他所有内容(设置端口,设置视图目录,设置模板引擎等)似乎都正常,那么为什么这行代码无法执行? 我尝试了什么 清空浏览器缓存 重新启动终端并再

  • 我在使用jquery或vanila javascript更改svg图像的颜色时遇到了问题。我尝试了一些方法,但似乎都不起作用,原始颜色是黑色的,如果我在IDE中打开svg图像并添加/更改填充属性,我可以更改它。但JS不行。我做错了什么?其他代码行工作正常,所以文件或其他文件没有问题。 到目前为止,我已经尝试了这几行代码,并将id放在img标签以及svg元素本身上 中文: JS: UPDATE-创建

  • 问题内容: 我已经建立了一个表,该表包含带有外键的列,并将其设置为(删除父级时删除子级) SQL命令将其更改为什么?(如果有孩子,则不能删除其父母) 问题答案: 旧问题,但添加了答案,以便获得帮助 它分为两个步骤: 假设,a 具有 列名称为, 约束条件 名称为的 外键 ,并通过键被引用到表中( 如下图所示 )。 第一步 ,删除旧的约束:(参考) 通知约束已删除,列未删除 第二步 ,添加新约束: 添

  • 问题内容: 我在表中有一条带有错误主键的记录。我想将其更改为正确的值,但该值在许多其他表中使用。 有没有简单的方法可以在同一时间更新主键和外键? 问题答案: 如果将外键设置为级联更改,则值应自动更改。