무결성 제약 조건 위반: 1452 하위 행을 추가하거나 업데이트할 수 없습니다.
코멘트 테이블에 값을 삽입하려고 하면 오류가 발생합니다.하위 행을 추가하거나 업데이트할 수 없으며, 그것이 무엇을 의미하는지 알 수 없습니다.
내 스키마는 이렇게 생겼다.
-- ----------------------------
-- 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')
내가 받는 오류는 다음과 같다.
SQLSTATE [23000]: 위반:을 할 수 : 외부 키 실패함(「」: 1452).
anthonyl_fbpj
.comments
, 제 , , , ,fk_comments_projects1
키Foreign Key)project_id
projects
)id
NO ACTION의 경우
컬럼의 project_id
comments
하는 것은 projects
은 . 의 . . . . 。project_id
comments
는 의 달라집니다.ID
Projects
.
값50dc845a-83e4-4db3-8705-5432ae7aaee3
에 .project_id
에는 존재하지 않습니다.projects
.
있어야 합니다.project_id
fillable
Comment
model.model.model.models
저도 같은 문제가 있었고, 그게 이유였어요.
기존 테이블에 새 외부 키를 추가하고 열이 null이 아닌 경우 기본값이 할당되지 않은 경우 이 오류가 발생합니다.
중 하나를 .nullable
★★★★★★★★★★★★★★★★★」assign default value
, 「」delete all the existing records
해결할 수 있습니다.
또한 추가한 외부 키가 원래 열과 동일한 유형인지 확인하십시오. 참조하는 열이 동일한 유형이 아닐 경우 이 키도 실패합니다.
제 결정이 도움이 되기를 바랍니다.라라벨에서도 비슷한 오류가 있었어요.이치노
다음 중 하나:
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');
...
});
위의 ('comments') 기능에 유의하십시오.올바른 코드
$table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
, 컬럼 값 ", " " " " 가 됩니다.project_id
comments
삽입하는 것뿐만 아니라doesn't exist
테이블 프로젝트뿐만 아니라project_id
디폴트값이 없는 것 같습니다.예를 들어, 내 경우 NULL로 설정합니다.
Laravel에 대해서는 다음과 같이 이행 php 파일의 코드 청크로 간주할 수 있습니다.
class ForeinToPhotosFromUsers extends Migration
{ /** * Run the migrations. * * @return void */
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->unsignedBigInteger('photo_id')->nullable();// ! ! ! THIS STRING ! ! !
$table->foreign('photo_id')->references('id')->on('photos');
});
}
}
이 모든 것 옆에 Model 클래스(내 경우는 Photo)를 만들어야 했습니다.
먼저 제약 조건 "fk_comments_projects1"과 해당 인덱스를 삭제합니다.그 후 다시 만듭니다.
테이블을 올바른 순서로 작성 및 채우지 않은 경우에도 이 오류가 발생합니다.들어 스키마에 에는 Comments가 필요합니다.user_id
,project_id
,task_id
★★★★★★★★★★★★★★★★★」data_type_id
,,Users
「」,Projects
「」,Task
과 '''Data_Type
테이블 ID 또는 다른 열을 참조하려면 테이블이 이미 종료되어 있고 테이블 내에 값이 있어야 합니다.
Larabel에서는 올바른 순서로 데이터베이스 시드러를 호출하는 것을 의미합니다.
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(UserSeeder::class);
$this->call(ProjectSeeder::class);
$this->call(TaskSeeder::class);
$this->call(DataTypeSeeder::class);
$this->call(CommentSeeder::class);
}
}
이렇게 해서 비슷한 문제를 해결했습니다.
테이블 내에 de FK를 작성하는 행이 몇 개 있을 수 있습니다.
Foreign_key_checks OFF를 사용하여 마이그레이션을 실행합니다.콘텐츠 테이블에 대응하는 id 필드가 있는 레코드만 삽입합니다.
이 문제는 추가하려는 project_id가 있는 데이터베이스에 프로젝트 레코드가 없기 때문일 수 있습니다.
만약 누군가가 라라벨을 사용하다가 이 문제가 발생할 경우.이것도 받고 있었는데, 문제는 ID(외부 키)를 피벗 테이블에 삽입하는 순서였습니다.
구체적으로는, 다대다 관계에 대한 예를 이하에 나타냅니다.
wordtokens <-> wordtoken_wordchunk <-> wordchunks
// 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 모델의 'wordchunk_id'와 'wordtoken_id'의 순서를 교환하여 문제를 해결했습니다.
코드 완성을 위해 모델을 유지하는 방법은 다음과 같습니다.
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);
}
}
제가 실수로 제 아이 기록에서 잘못된 "유체"를 사용했을 때 이런 문제가 생겼습니다.이 경우 제약조건은 링크가 올바른지 확인하기 위해 하위 레코드에서 상위 레코드로 이동합니다.수동으로 생성 중이었는데, 이미 모델이 자동으로 실행되도록 조정되어 있었습니다.그래서 내 해결책은:
$parent = Parent:create($recData); // asssigning autogenerated uuid into $parent
그런 다음 자녀 클래스를 호출하여 어린이를 삽입할 때 다음 var 값을 전달했습니다.
$parent->uuid
도움이 됐으면 좋겠다.
저도 같은 오류가 있었습니다.문제는 추가하려고 했던 것입니다.role_id
users
, 단, " ", ''role_id
기본값이 없기 때문에 DB는 사용자가 몇 명 있고 사용자가 열을 추가하는 방법을 모르기 때문에 열을 삽입할 수 없도록 했습니다. 에 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★migrate:fresh
실제 중인 을 「 」, 「 」, 「 」, 「 」로했을 가능성이 있습니다role_id
DB에서 해당 역할을 가질 때까지 제한을 받지 않도록 해야 합니다.
프라이머리 키의 값과 일치하지 않는 외부 키 값을 삽입하고 있을 수 있습니다.
제 경우 모델 이름 중 하나에 공백을 두었기 때문에 작동하지 않았습니다.
외국인 키가 죽은 엔트리로 테이블을 채웠어요테이블을 청소하고 나서, 나는 새로운 제약을 추가할 수 있었다.
DELETE FROM `table_with_bad_entries` WHERE `expected_foreign_key` not in (select `id` from `the_referenced_table`);
테이블을 삭제한 후 다시 Import를 했더니 작동했어요.부모테이블(사용자)을 삭제하고 다시 작성하면 자녀테이블(좋아요)이 부모테이블(사용자)에 대한 외부키를 가지고 있기 때문입니다.
언급URL : https://stackoverflow.com/questions/14063652/integrity-constraint-violation-1452-cannot-add-or-update-a-child-row
'programing' 카테고리의 다른 글
PHP를 사용하여 문자열의 처음 4자 제거 (0) | 2022.11.10 |
---|---|
각 데이터 점에 다른 텍스트가 있는 산점도 (0) | 2022.11.10 |
MariaDB on Debian:구문 오류:unix 소켓 인증을 패스워드 베이스로 되돌리는 방법 (0) | 2022.11.10 |
bash에서 MySQL 명령을 실행하는 방법 (0) | 2022.11.10 |
빈 결과 세트를 선택하려면 어떻게 해야 합니까? (0) | 2022.11.10 |