[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.그냥 단순히 삽입하는 테이블의 의견에 열 PROJECT_ID 값이 테이블 프로젝트에 존재하지 않는 것을 의미한다. 컬럼의 값이 테이블의 의견을 PROJECT_ID 명심 테이블 프로젝트에 ID의 값에 따라 달라집니다.
그냥 단순히 삽입하는 테이블의 의견에 열 PROJECT_ID 값이 테이블 프로젝트에 존재하지 않는 것을 의미한다. 컬럼의 값이 테이블의 의견을 PROJECT_ID 명심 테이블 프로젝트에 ID의 값에 따라 달라집니다.
값 50dc845a - 83e4-4db3-8705-5432ae7aaee3 당신이 열 PROJECT_ID을 위해 삽입하는 테이블 프로젝트에 존재하지 않습니다.
-
==============================
2.확실히 당신은 당신의 코멘트 모델의 작성 가능한 속성에 PROJECT_ID했는지 확인합니다.
확실히 당신은 당신의 코멘트 모델의 작성 가능한 속성에 PROJECT_ID했는지 확인합니다.
저도 같은 문제를 가지고 있었다, 그리고이 이유였다.
-
==============================
3.또한 열 당신이있는 거 참조가 너무 실패 할 것 같은 타입이 아닌 경우 추가 외래 키가 원래 컬럼의 동일한 유형인지 확인합니다.
또한 열 당신이있는 거 참조가 너무 실패 할 것 같은 타입이 아닌 경우 추가 외래 키가 원래 컬럼의 동일한 유형인지 확인합니다.
-
==============================
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.먼저 또한 제약 "fk_comments_projects1"와 색인을 삭제합니다. 그 후 다시 작성하십시오.
먼저 또한 제약 "fk_comments_projects1"와 색인을 삭제합니다. 그 후 다시 작성하십시오.
-
==============================
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.실수로 내 아이의 기록에 "UUID"틀린를 사용하여 때 나는이 문제를 가지고 있었다. 즉 부모 레코드에 아이에서 제약 외모를 발생하면 링크가 올바른지 확인합니다. 이미 자동으로 할 내 모델 리깅했을 때 나는 수동으로 생성되었다. 내 수정했다 그래서 :
실수로 내 아이의 기록에 "UUID"틀린를 사용하여 때 나는이 문제를 가지고 있었다. 즉 부모 레코드에 아이에서 제약 외모를 발생하면 링크가 올바른지 확인합니다. 이미 자동으로 할 내 모델 리깅했을 때 나는 수동으로 생성되었다. 내 수정했다 그래서 :
$parent = Parent:create($recData); // asssigning autogenerated uuid into $parent
내가 삽입 아이들에게 내 자식 클래스를 호출 할 때 다음, 나는이 VAR 값을 통과 :
$parent->uuid
희망이 도움이.
-
==============================
8.당신이 FK 드 만들 것을 아마 당신은 테이블의 일부 행이있다.
당신이 FK 드 만들 것을 아마 당신은 테이블의 일부 행이있다.
FOREIGN_KEY_CHECKS를 OFF로 마이그레이션을 실행 내용 테이블에 id 필드에 대응 한 레코드 만 삽입합니다.
-
==============================
9.기존 테이블에 새 외래 키를 추가하고 열이 오류가 발생합니다, 기본 값을 할당하지 null이 아닌 경우,
기존 테이블에 새 외래 키를 추가하고 열이 오류가 발생합니다, 기본 값을 할당하지 null이 아닌 경우,
어느 쪽이든 당신은 널 (NULL) 또는 할당 기본 값을 만들거나 그것을 해결하기 위해 기존의 모든 기록을 삭제해야합니다.
from https://stackoverflow.com/questions/14063652/integrity-constraint-violation-1452-cannot-add-or-update-a-child-row by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 널 (null) == null이 결정 (0) | 2020.04.26 |
---|---|
[SQL] ROW_NUMBER와 별개의 SQL 쿼리 (0) | 2020.04.26 |
[SQL] 오라클 SQL 이스케이프 문자 ( '&'A에 대한) (0) | 2020.04.26 |
[SQL] "경우가 존재 삽입 또는 업데이트"SqlBulkCopy의 할 수있는 방법? (0) | 2020.04.26 |
[SQL] SQL 문자열 비교보다 적은 사업자보다 큰 (0) | 2020.04.26 |