2

当我不想将两个表相互连接时,我收到消息:#1452 - 无法添加或更新子行:外键约束失败....我想从 facebook_users 表连接 oauth_uid2(主键)到带有外键 oauth_uid2 的 bugs 表。但我总是收到这个消息。我已经清除了我的数据,但没有任何效果。此外,在 users_facebook 表中,我有 1 条记录。

1452 - 无法添加或更新子行:外键约束失败 ( phples. bugs, CONSTRAINT bugs_ibfk_1FOREIGN KEY ( oauth_uid2) REFERENCES users_facebook( oauth_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
4

2 回答 2

3

您已经链接了表格,这就是错误的来源。在尝试使用相同的 oauth_uid2插入记录users_facebook 之前,您需要确保有记录,例如bugs

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

您尝试将记录插入bugswith

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.
于 2013-05-16T18:30:17.300 回答
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;

你将能够做到这一点。

于 2014-05-12T05:15:21.797 回答