Mysql 无法添加或更新子行:外键约束失败

Mysql 无法添加或更新子行:外键约束失败,mysql,Mysql,表1 表2 +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | UserID | int(11) | NO | PRI | NUL

表1

表2

+----------+-------------+------+-----+---------+----------------+
| 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   |     |         |                |
+----------+-------------+------+-----+---------+----------------+
错误:

+------------------+--------------+------+-----+---------+----------------+
| 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   |     |         |                |
+------------------+--------------+------+-----+---------+----------------+

我做错了什么?我读了,看不出有什么问题。

您出现此错误是因为您试图向
表2
添加/更新一行,该行基于
表1
中当前存储的值,没有有效的
UserID
字段值。如果您发布更多代码,我可以帮助您诊断具体原因。

您遇到此错误是因为您试图向
表2
添加/更新一行,该行基于当前存储在
表1
中的值,没有有效的
UserID
字段值。如果您发布更多的代码,我可以帮助您诊断具体原因。

这意味着您试图在
表2
中插入
表1
中不存在的
用户ID
值,这意味着您试图在
表2中插入
中不存在的
用户ID
table1

如果在表2中创建外键之前在表1中插入了一行,则会出现外键约束错误,因为自动递增值在表1中为2,在表2中为1。要解决此问题,必须截断表1并将自动增量值设置回1。然后可以添加表2。

如果在表2中创建外键之前在表1中插入了一行,则会出现外键约束错误,因为自动递增值在表1中为2,在表2中为1。要解决此问题,必须截断表1并将自动增量值设置回1。然后您可以添加表2。

您得到这个错误是因为有一些值int
table2.UserID
不存在于
table1.UserID
(我想您在创建这个外键之前已经手动设置了
table2.UserID
值)。
此场景的一个示例:
table1.UserID
get values 1,2,3和
table2.UserID
get values 4(手动添加)。因此,当您创建外键时,他们无法从
table1
中找到
UserID=4
,并且会出现错误。
要修复此错误,只需从
table2
中删除
UserID=4
,或者您可以将两者都清空,然后创建外键和。

祝你好运

之所以出现此错误,是因为在
table2.UserID
中有一些值不存在于
table1.UserID
(我猜您在创建此外键之前已经手动设置了
table2.UserID
值)。
此场景的一个示例:
table1.UserID
get values 1,2,3和
table2.UserID
get values 4(手动添加)。因此,当您创建外键时,他们无法从
table1
中找到
UserID=4
,并且会出现错误。
要修复此错误,只需从
table2
中删除
UserID=4
,或者您可以将两者都清空,然后创建外键和。

祝你好运

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


请参见

我发现了另一个奇怪的情况:如果您意外地从InnoDB表创建了一个外键到MyISAM表,MySQL在插入时会抛出这个错误,即使数据在其他方面是有效的


请看另一个给我这个错误的奇怪案例。我错误地将外键引用到id主键。这是由错误的alter table命令引起的。我通过查询INFORMATION\u SCHEMA表发现了这一点


表格太混乱了,任何ALTER table命令都无法修复。我终于放下桌子,把它重建了。这消除了integrityError。

又是一个奇怪的案例,给了我这个错误。我错误地将外键引用到id主键。这是由错误的alter table命令引起的。我通过查询INFORMATION\u SCHEMA表发现了这一点


表格太混乱了,任何ALTER table命令都无法修复。我终于放下桌子,把它重建了。这就消除了integrityError。

一个简单的黑客可以在对表执行任何操作之前禁用外键检查。质询

com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: 
Cannot add or update a child row: a foreign key constraint fails 
(`myapp/table2`, CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`UserID`) 
REFERENCES `table1` (`UserID`)) 
这将禁用与任何其他表的外键匹配。使用完表后,再次启用它

SET FOREIGN_KEY_CHECKS=0
这对我来说很有用



请注意,执行此操作时,您将进入危险区域。虽然确实存在有效的用例,但只有当您确信自己理解其含义时,才应该这样做。

一个简单的方法是在对表执行任何操作之前禁用外键检查。质询

com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: 
Cannot add or update a child row: a foreign key constraint fails 
(`myapp/table2`, CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`UserID`) 
REFERENCES `table1` (`UserID`)) 
这将禁用与任何其他表的外键匹配。使用完表后,再次启用它

SET FOREIGN_KEY_CHECKS=0
这对我来说很有用



请注意,执行此操作时,您将进入危险区域。虽然确实存在有效的用例,但只有当您确信自己理解其含义时,才应该这样做。

可能在您添加
userID
列时,已经为该表建立了一个数据,因此它的默认值为
0
,尝试添加不带
非空

的列可能在添加
userID
列时,有一个为该表建立的数据,因此它的默认值为
0
,尝试添加不带
非空

的列。我还遇到了以下错误:“无法添加或更新子行:外键约束失败”。我在向父表添加新行时出错

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

我也遇到了这个错误:
@Column(insertable = false, nullable = true)
private int UserID;
UserID    PostID    Title    Summary
5         1         Lorem    Ipsum dolor sit
UserID    Password    Username    Email
9         ********    JohnDoe     john@example.com
update table2 set UserID = 1 where UserID is null