2013-05-16 120 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-聲明。 –

相關問題