복붙노트

[SQL] 무결성 제약 조건 위반 : 1452 추가 또는 자식 행을 업데이트 할 수 없습니다 :

SQL

무결성 제약 조건 위반 : 1452 추가 또는 자식 행을 업데이트 할 수 없습니다 :

내 의견 테이블에 값을 삽입하려고 내가 오류를 얻고있다. 그것의 I 추가 또는 업데이트 자식 행 수 없다는 난 아무 생각이 무슨 의미가 없다.

내 스키마는 다음과 같이 보입니다

-- ----------------------------
-- Table structure for `comments`
-- ----------------------------
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments` (
  `id` varchar(36) NOT NULL,
  `project_id` varchar(36) NOT NULL,
  `user_id` varchar(36) NOT NULL,
  `task_id` varchar(36) NOT NULL,
  `data_type_id` varchar(36) NOT NULL,
  `data_path` varchar(255) DEFAULT NULL,
  `message` longtext,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_comments_users` (`user_id`),
  KEY `fk_comments_projects1` (`project_id`),
  KEY `fk_comments_data_types1` (`data_type_id`),
  CONSTRAINT `fk_comments_data_types1` FOREIGN KEY (`data_type_id`) REFERENCES `data_types` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_comments_projects1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_comments_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;

-- ----------------------------
-- Records of comments
-- ----------------------------

-- ----------------------------
-- Table structure for `projects`
-- ----------------------------
DROP TABLE IF EXISTS `projects`;
CREATE TABLE `projects` (
  `id` varchar(36) NOT NULL,
  `user_id` varchar(36) NOT NULL,
  `title` varchar(45) DEFAULT NULL,
  `description` longtext,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_projects_users1` (`user_id`),
  CONSTRAINT `fk_projects_users1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;

-- ----------------------------
-- Records of projects
-- ----------------------------
INSERT INTO `projects` VALUES ('50dcbc72-3410-4596-8b71-0e80ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', 'Brand New Project', 'This is a brand new project', '2012-12-27 15:24:02', '2012-12-27 15:24:02');

그리고 MySQL의 문은이 같은 모양의 무언가를하려고

INSERT INTO `anthonyl_fbpj`.`comments` (`project_id`, `user_id`, `task_id`, `data_type_id`, `message`, `modified`, `created`, `id`) 
VALUES ('50dc845a-83e4-4db3-8705-5432ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', '1', '50d32e5c-abdc-491a-a0ef-25d84e9f49a8', 'this is a test', '2012-12-27 19:20:46', '2012-12-27 19:20:46', '50dcf3ee-8bf4-4685-aa45-4eb4ae7aaee3')

오류는이 같은 외모를 얻을 수

해결법

  1. ==============================

    1.그냥 단순히 삽입하는 테이블의 의견에 열 PROJECT_ID 값이 테이블 프로젝트에 존재하지 않는 것을 의미한다. 컬럼의 값이 테이블의 의견을 PROJECT_ID 명심 테이블 프로젝트에 ID의 값에 따라 달라집니다.

    그냥 단순히 삽입하는 테이블의 의견에 열 PROJECT_ID 값이 테이블 프로젝트에 존재하지 않는 것을 의미한다. 컬럼의 값이 테이블의 의견을 PROJECT_ID 명심 테이블 프로젝트에 ID의 값에 따라 달라집니다.

    값 50dc845a - 83e4-4db3-8705-5432ae7aaee3 당신이 열 PROJECT_ID을 위해 삽입하는 테이블 프로젝트에 존재하지 않습니다.

  2. ==============================

    2.확실히 당신은 당신의 코멘트 모델의 작성 가능한 속성에 PROJECT_ID했는지 확인합니다.

    확실히 당신은 당신의 코멘트 모델의 작성 가능한 속성에 PROJECT_ID했는지 확인합니다.

    저도 같은 문제를 가지고 있었다, 그리고이 이유였다.

  3. ==============================

    3.또한 열 당신이있는 거 참조가 너무 실패 할 것 같은 타입이 아닌 경우 추가 외래 키가 원래 컬럼의 동일한 유형인지 확인합니다.

    또한 열 당신이있는 거 참조가 너무 실패 할 것 같은 타입이 아닌 경우 추가 외래 키가 원래 컬럼의 동일한 유형인지 확인합니다.

  4. ==============================

    4.경우에는 누군가가 Laravel을 사용하고이 문제를 받고있다. I뿐만 아니라이 점점하고 문제 I 피벗 테이블의 식별자 (즉, 외래 키)에 삽입 된 순서였다.

    경우에는 누군가가 Laravel을 사용하고이 문제를 받고있다. I뿐만 아니라이 점점하고 문제 I 피벗 테이블의 식별자 (즉, 외래 키)에 삽입 된 순서였다.

    구체적으로, 많은 관계로 많은 예제를 아래에서 찾을 수 있습니다 :

    <-> wordtoken_wordchunk <-> wordchunks을 wordtokens

    // wordtoken_wordchunk table
    Schema::create('wordtoken_wordchunk', function(Blueprint $table) {
            $table->integer('wordtoken_id')->unsigned();
            $table->integer('wordchunk_id')->unsigned();
    
            $table->foreign('wordtoken_id')->references('id')->on('word_tokens')->onDelete('cascade');
            $table->foreign('wordchunk_id')->references('id')->on('wordchunks')->onDelete('cascade');
    
            $table->primary(['wordtoken_id', 'wordchunk_id']);
        });
    
    // wordchunks table
    Schema::create('wordchunks', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
            $table->string('text');
        });
    
    // wordtokens table
    Schema::create('word_tokens', function (Blueprint $table) {
            $table->increments('id');
            $table->string('text');
    });
    

    다음과 같이 이제 내 모델을 보면 :

    class WordToken extends Model
    {
       public function wordchunks() {
          return $this->belongsToMany('App\Wordchunk');
       }
    }
    
    class Wordchunk extends Model
    {
    
        public function wordTokens() {
            return $this->belongsToMany('App\WordToken', 'wordtoken_wordchunk', 'wordchunk_id', 'wordtoken_id');
        }
    }
    

    내가의 순서를 교환하여 문제를 해결 'wordchunk_id'와 'wordtoken_id'는 Wordchunk 모델이다.

    코드 완성, 이것은 내가 모델을 유지하는 방법입니다 :

    private function persistChunks($chunks) {
        foreach ($chunks as $chunk) {
            $model = new Wordchunk();
            $model->text = implode(' ', array_map(function($token) {return $token->text;}, $chunk));
            $tokenIds = array_map(function($token) {return $token->id;}, $chunk);
            $model->save();
            $model->wordTokens()->attach($tokenIds);
        }
    }
    
  5. ==============================

    5.먼저 또한 제약 "fk_comments_projects1"와 색인을 삭제합니다. 그 후 다시 작성하십시오.

    먼저 또한 제약 "fk_comments_projects1"와 색인을 삭제합니다. 그 후 다시 작성하십시오.

  6. ==============================

    6.나는 내 결정이 도움이되기를 바랍니다. 나는 Laravel에서 유사한 오류가 발생했습니다. 내가 잘못 테이블에 외래 키를 추가했다. 잘못된 코드:

    나는 내 결정이 도움이되기를 바랍니다. 나는 Laravel에서 유사한 오류가 발생했습니다. 내가 잘못 테이블에 외래 키를 추가했다. 잘못된 코드:

    Schema::create('comments', function (Blueprint $table) {
    $table->unsignedBigInteger('post_id')->index()->nullable();
    ...
    $table->foreign('post_id')->references('id')->on('comments')->onDelete('cascade');
        });
    
    
    Schema::create('posts', function (Blueprint $table) {
        $table->bigIncrements('id');
        ...
        });
    

    ( '의견') 위의 기능을하시기 바랍니다 참고. 올바른 코드

     $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
    
  7. ==============================

    7.실수로 내 아이의 기록에 "UUID"틀린를 사용하여 때 나는이 문제를 가지고 있었다. 즉 부모 레코드에 아이에서 제약 외모를 발생하면 링크가 올바른지 확인합니다. 이미 자동으로 할 내 모델 리깅했을 때 나는 수동으로 생성되었다. 내 수정했다 그래서 :

    실수로 내 아이의 기록에 "UUID"틀린를 사용하여 때 나는이 문제를 가지고 있었다. 즉 부모 레코드에 아이에서 제약 외모를 발생하면 링크가 올바른지 확인합니다. 이미 자동으로 할 내 모델 리깅했을 때 나는 수동으로 생성되었다. 내 수정했다 그래서 :

    $parent = Parent:create($recData); // asssigning autogenerated uuid into $parent
    

    내가 삽입 아이들에게 내 자식 클래스를 호출 할 때 다음, 나는이 VAR 값을 통과 :

    $parent->uuid
    

    희망이 도움이.

  8. ==============================

    8.당신이 FK 드 만들 것을 아마 당신은 테이블의 일부 행이있다.

    당신이 FK 드 만들 것을 아마 당신은 테이블의 일부 행이있다.

    FOREIGN_KEY_CHECKS를 OFF로 마이그레이션을 실행 내용 테이블에 id 필드에 대응 한 레코드 만 삽입합니다.

  9. ==============================

    9.기존 테이블에 새 외래 키를 추가하고 열이 오류가 발생합니다, 기본 값을 할당하지 null이 아닌 경우,

    기존 테이블에 새 외래 키를 추가하고 열이 오류가 발생합니다, 기본 값을 할당하지 null이 아닌 경우,

    어느 쪽이든 당신은 널 (NULL) 또는 할당 기본 값을 만들거나 그것을 해결하기 위해 기존의 모든 기록을 삭제해야합니다.

  10. from https://stackoverflow.com/questions/14063652/integrity-constraint-violation-1452-cannot-add-or-update-a-child-row by cc-by-sa and MIT license