2013-05-16 111 views
2

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

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

什么查询或管理动作都在尝试执行? –

回答

0

您已经链接了表,这是错误来自哪里。你需要确保你有users_facebook一个记录之前您尝试将记录插入bugs具有相同oauth_uid2,例如

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

尝试如果你备份你的Magento数据库使用其他工具,如phpMyAdmin或者Navicat的,这些特殊的报表将缺少记录插入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. 
2

。当您尝试运行.sql文件,你会得到错误像这样:

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

出现此错误,因为你正在导入的数据提供表按行逐行排列,而不考虑数据库的逻辑结构和完整性。

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

SET @[email protected]@CHARACTER_SET_CLIENT; 
SET @[email protected]@CHARACTER_SET_RESULTS; 
SET @[email protected]@COLLATION_CONNECTION; 
SET NAMES utf8; 
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO'; 
SET @[email protected]@SQL_NOTES, SQL_NOTES=0; 

在文件的结尾,添加到打开所需的报表再次约束检查:

SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 
SET [email protected]_CHARACTER_SET_CLIENT; 
SET [email protected]_CHARACTER_SET_RESULTS; 
SET [email protected]_COLLATION_CONNECTION; 
SET [email protected]_SQL_NOTES; 

您将能够做到这一点。

+1

Thanx。这节省了我的一天! 进口已经因为任何SQL错误的停止后, 你上之前已经处理每一个INSERT,语句重复项,错误。 这就是为什么我更换了所有的INSERT的陈述与更换的陈述。 如果没有东西来取代,替换,语句的行为就像一个INSERT-声明。 –

相关问题