#1452 - 不能添加或更新子行,外键约束失败(#1452 - Cannot add or up

2019-09-03 18:57发布

当我wan't到两个表与海誓山盟连接,然后我得到的消息:#1452 - 不能添加或更新子行,外键约束失败....我想连接从facebook_users TABEL oauth_uid2(主键)到臭虫TABEL与外键oauth_uid2。 但是,我总是得到这个消息。 我已经清除我的数据,但没有works.Also在表users_facebook我有1分的纪录。

1452 -不能添加或更新子行,外键约束失败( phplesbugs ,约束bugs_ibfk_1外键( oauth_uid2 )参考users_facebookoauth_uid2 )ON DELETE CASCADE ON UPDATE CASCADE)

错误表:FK = oauth_uid2,PK = bug_id

 #Name  Type    Collation   Attributes  Null    Default Extra   Action
     1  bug_id  int(30)         No  None    AUTO_INCREMENT    Change      Drop    Browse distinct values     Primary      Unique      Index  Spatial     Fulltext
     2  bugtitle    varchar(50) utf8_unicode_ci     No  None          Change      Drop    Browse distinct values      Primary     Unique      Index  Spatial     Fulltext
     3  bugdescription  varchar(500)    utf8_unicode_ci     No  None          Change      Drop    Browse distinct values      Primary     Unique      Index  Spatial     Fulltext
     4  oauth_uid2  int(30)         No  None          Change      Drop    Browse distinct values      Primary     Unique      Index  Spatial     Fulltext

users_facebook表:PK = oauth_uid2

#   Name    Type    Collation   Attributes  Null    Default Extra   Action
     1  oauth_uid2  int(30)         No  None          Change      Drop    Browse distinct values     Primary      Unique      Index  Spatial     Fulltext
     2  email   varchar(70) utf8_unicode_ci     No  None          Change      Drop    Browse distinct values      Primary     Unique      Index  Spatial     Fulltext

Answer 1:

你已经有了链接表,这是在错误的来源。 你需要确保你有一个记录users_facebook然后再尝试插入记录bugs与同oauth_uid2,如

users_facebook has records with oauth_uid2 `10`, `20`, `30`

您尝试插入一条记录bugs

INSERT INTO bugs (oauth_uid2) VALUES (10) // works, there's a matching record in users_facebook
INSERT INTO bugs (oauth_uid2) VALUES (15) // fails, there's no user with that id.


Answer 2:

如果备份使用其他工具,如phpMyAdmin或者Navicat的你的Magento数据库,这些特殊的报表将会丢失。 当您尝试运行.sql文件,你会得到这样的错误:

不能添加或更新子行,外键约束失败

因为要导入的数据表提供的表格,一行一行,而不考虑数据库的逻辑结构和完整性出现此错误。

要恢复.sql文件备份,而约束检查,只需在您的.sql文件的开头添加以下语句:

SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;
SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;
SET NAMES utf8;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0;

在该文件的末尾,添加打开约束再次检查所需要的语句:

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT;
SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS;
SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION;
SET SQL_NOTES=@OLD_SQL_NOTES;

你将能够做到这一点。



文章来源: #1452 - Cannot add or update a child row: a foreign key constraint fails
标签: sql row