[mysql] 무결성 제약 위반 : 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
, CONSTRAINTfk_comments_projects1
FOREIGN KEY (project_id
) REFERENCESprojects
(id
) ON DELETE NO ACTION ON UPDATE NO ACTION)
답변
단순히 삽입 하려는 project_id
테이블의 열 값이 table에 comments
존재하지 않음을 의미합니다 projects
. project_id
table 의 column comments
값은 ID
on table 의 값에 따라 달라집니다 Projects
.
50dc845a-83e4-4db3-8705-5432ae7aaee3
column에 삽입 하는 값 이 project_id
table에 존재하지 않습니다 projects
.
답변
당신이 project_id
에 있는지 확인하십시오fillable
Comment
모델 속성에 .
나는 똑같은 문제가 있었고 이것이 그 이유였습니다.
답변
또한 추가하는 외래 키가 원래 열과 동일한 유형인지 확인하십시오. 참조하는 열이 동일한 유형이 아니면 실패합니다.
답변
기존 테이블에 새 외래 키를 추가하고 열이 null이 아니고 기본값이 할당되지 않은 경우이 오류가 발생합니다.
당신은 그것을 만들 nullable
거나 assign default value
또는 delete all the existing records
그것을 해결해야합니다.
답변
먼저 제약 조건 “fk_comments_projects1″과 해당 인덱스를 삭제합니다. 그 후에 그것을 다시 만드십시오.
답변
내 결정이 도움이되기를 바랍니다. 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');
...
});
위의 ( ‘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)를 만들어야했습니다.