- 我正在使用 phpMyAdmin
- 我创建了 2 个表,Table1 和 Table2。
- 在表 1 中 (id) 是一个主键,我忘了创建外键 键入 Table2 并添加 table2 上的所有记录。
问题:
如果table2中没有记录,那么我可以创建一个外键,但是如果有记录,我们如何创建外键。
我必须在表 2 中创建外键。我尝试了以下查询
ALTER TABLE Table2
ADD CONSTRAINT FK_User_id
FOREIGN KEY(User_id) REFERENCES Table1(Id)
我在 phpMyadmin 中遇到错误
1452 - Cannot add or update a child row: a foreign key constraint fails
最佳答案
您的错误表明它无法创建外键,因为有些值无法映射。因此,在执行此操作之前,请确保 Table2 中的所有引用数据都存在于 Table1 的主键中。
查询每个表中的不同值并查看不同之处并在尝试重新运行更改脚本之前修复数据。
评论后更新:
In Table2, I have create User_id column and its take default value 0
针对您的上述评论,您应该使用 NULL
作为默认值而不是 0
,它应该可以工作。您将需要运行这样的更新脚本以将 0
值更改为 NULL
:
UPDATE Table2
SET User_Id = NULL
WHERE User_Id = 0
标记的答案是建议删除不引用表 1 中记录的数据,但这可能很危险,因为表 2 中的记录可能在不加入表 1 的情况下有效。
例如,假设表 1 是 CarBuyer
,表 2 是 CarsForSale
。 CarsForSale
有一个购买汽车的人的列,只有在购买汽车时才会填充该列,否则它应该是 NULL
。对于另一个答案,建议删除所有没有买家的汽车。
关于mysql - 如果表中已有记录,如何创建外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991526/