首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果表中已有记录,如何创建外键?

问如果表中已有记录,如何创建外键?
EN

Stack Overflow用户
提问于 2016-12-06 09:07:52
回答 1查看 1.7K关注 0票数 1
  • 我正在使用phpMyAdmin
  • 我已经创建了两个表,Table1和Table2。
  • 在Table1中,id是一个主键,我忘了在table2中创建外键,并在Table2上添加了所有记录。

问题:

如果table2中没有记录,那么我可以创建一个外键,但是如果有记录,我们如何创建外键。

我必须在Table2中创建外键。我试过以下查询

代码语言:javascript
复制
ALTER TABLE Table2 
ADD CONSTRAINT FK_User_id
FOREIGN KEY(User_id) REFERENCES Table1(Id)

我在phpMyadmin中出错了

1452 -无法添加或更新子行:外键约束失败

EN

回答 1

Stack Overflow用户

发布于 2016-12-06 09:10:51

您的错误说,它不能创建外键,因为有一些值,它不能映射。因此,在执行此操作之前,请确保Table2中的所有引用数据都存在于Table1的主键中。

查询每个表中的不同值,查看差异所在,并在尝试重新运行alter脚本之前修复数据。

在您的评论之后更新:

在Table2中,我创建了User_id列,其默认值为0。

针对上面的注释,您应该使用NULL作为默认值,而不是0,并且它应该可以工作。您需要运行像这样的更新脚本才能将0值更改为NULL:

代码语言:javascript
复制
UPDATE Table2
SET User_Id = NULL 
WHERE User_Id = 0

标记的答案是建议删除在Table1中不引用记录的数据,但这可能很危险,因为Table2中的记录在不加入Table1时可能是有效的。

例如,假设Table1是CarBuyer,Table2是CarsForSale。CarsForSale有一个用于购买汽车的人的列,该列只有在购买汽车时才会填充,否则应该是NULL。另一个答案是,建议删除所有没有买家的汽车。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40991526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档