表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,我不知道有什么问题。


当前回答

İf你使用mysql索引或表之间的关系,首先你删除列(例如:city_id),并创建新的列同名(例如:city_id)。然后再试一次……

其他回答

也许当你添加userID列时,有一个特定表的数据,它已经建立,所以它将有一个默认值为0,尝试添加不带NOT NULL的列

另一个奇怪的情况给了我这个错误。我错误地将外键引用到id主键。这是由错误的alter表命令引起的。我通过查询INFORMATION_SCHEMA表发现了这一点(参见这个stackoverflow答案)

该表非常混乱,任何ALTER table命令都无法修复。我终于放下桌子,重新组装。这消除了integrityError。

我还得到了这个错误:“不能添加或更新一个子行:一个外键约束失败”。我得到了错误时,添加一个新行到父表

问题是外键约束是在父表上定义的,而不是在子表上。

我发现了另一个奇怪的情况:如果你无意中创建了一个从InnoDB表到MyISAM表的外键,MySQL在插入时抛出这个错误,即使数据是有效的。

参见http://nick.zoic.org/art/mysql-foreign-key-error/

您不应该在数据库中的级联上放置ondelete字段。

因此,将onDelete字段设置为RESTRICT

祝你好运!