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


当前回答

表中是否包含任何现有数据? 如果是,请尝试清除要添加外键的表中的所有数据。 然后再次运行代码(添加外键)。

这个问题我遇到过很多次了。当您想在现有表上添加外键时,清除表中的所有数据可以工作。

希望这有用:)

其他回答

我也遇到过类似的问题。您正在尝试对一个有内容且列不可空的表应用外键。你有两个选择。

使要应用外键约束的列为可空。这样就可以应用外键,知道某些字段可以为空。(这就是我所做的。) 创建要应用外键约束的列,编写查询将外键插入该列,然后应用外键约束。(没有尝试过,但应该可以工作)

You're getting this error because there are some value int table2.UserID that is not exists on table1.UserID (I guess that you have setted table2.UserID value manualy before you created this foreign key). One example for this scene: table1.UserID get values 1,2,3 and table2.UserID get values 4 (add by manual). So when you make a foreign key, they can't find UserID = 4 from table1 and the error will ocurse. To fix this error, just remove UserID = 4 from table2 or you can empty both of them and then create the foreign key and. Good luck!

子表外键约束失败

这个问题可能是由以下原因引起的:

如果你在Spring mvc中这样做,你需要显式地描述id类型,因为有时mysql无法识别id的类型。所以你显式设置为在你的实体class@GeneratedValue(策略= GenerationType.IDENTITY)

删除table2的UserID字段的索引。它很适合我

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