2

2 つのテーブルを相互に接続したくない場合、次のメッセージが表示されます: #1452 - 子行を追加または更新できません: 外部キー制約が失敗します.外部キー oauth_uid2 を使用してバグ テーブルに移動します。しかし、私はいつもこのメッセージを受け取ります。私はすでに自分のデータを消去しましたが、何も機能しません。テーブル 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

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 に答える