表1:

Field Type Null Key Default Extra
UserID int(11) NO PRI NULL auto_increment
Password varchar(20) NO
Username varchar(25) NO
Email varchar(60) NO

表2:

Field Type Null Key Default Extra
UserID int(11) NO MUL
PostID int(11) NO PRI NULL auto_increment
Title varchar(50) NO
Summary varchar(500) NO

错误:

com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: 无法添加或更新子行:外键约束失败 (myapp/table2,约束table2_ibfk_1外键(UserID)) 引用表1 (UserID))

我做错了什么?我读了http://www.w3schools.com/Sql/sql_foreignkey.asp,我不知道有什么问题。


当前回答

这意味着您试图向table2插入一个table1中不存在的UserID值。

其他回答

如果您添加了复选框NOT NULL的列 你会惊讶地发现所有的行都是0, 当你尝试添加外键时,可能你在foreign table2中没有值为0的行,所以mysql错误弹出显示

我也遇到了同样的问题,原因是在添加外键之前,我在第一个表中有一行。

我也面临同样的问题,问题是我的父表项值不匹配外键表值。 所以请尝试后清除所有行..

你得到这个错误是因为你试图添加/更新一行到table2,没有有效的值为UserID字段基于当前存储在table1的值。如果你发布更多的代码,我可以帮助你诊断具体的原因。

当您希望添加外键时,该错误会发生在父表的主键中不存在的值。必须确保table2中的新外键UserID具有table1主键中存在的值,有时默认为null或等于0。

你可以先用一个存在于table1的主键中的值来更新table2中外键的所有字段。

update table2 set UserID = 1 where UserID is null

如果要添加不同的userid,则必须使用所需的值修改每行。