mysql - 如果表中已有记录,如何创建外键?

标签 mysql sql-server database phpmyadmin

  • 我正在使用 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 是 CarsForSaleCarsForSale 有一个购买汽车的人的列,只有在购买汽车时才会填充该列,否则它应该是 NULL。对于另一个答案,建议删除所有没有买家的汽车。

关于mysql - 如果表中已有记录,如何创建外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991526/

相关文章:

sql - sql中变量的数据类型大小

mysql - 指定的 key 太长 : max key lenth is 3072 bytes

php - MySQL 查询不运行

sql - 高级 SQL 开发人员面试问题 - 太难了?

SQL:Last_Value() 返回错误结果(但 First_Value() 工作正常)

mysql - 将表从一个模式移动到另一个模式?

mysql - 具有属性的产品的数据模型,每个属性组合具有不同的价格

php 计算帖子回复次数

php - “隐藏”管理文件夹,使用不同的文件夹名称?

java - JPA 实体连接组合键上的列,日期作为 PK 之一