programing

이 외부 키 제약 조건이 잘못 형성된 이유는 무엇입니까?

copyandpastes 2022. 10. 30. 20:48
반응형

이 외부 키 제약 조건이 잘못 형성된 이유는 무엇입니까?

내가 어떻게 이 질문에 도달하게 되었는지는 오류 메시지 그 자체입니다.

먼저 오류 메시지입니다.1452: Cannot add or update a child row: a foreign key constraint fails.

유효한 외부 키를 사용하여 데이터를 삽입하려고 시도하지 않습니다.

이 문제를 재현하기 위해 테이블을 다시 작성했는데, 새로운 오류가 발견되어 근본 원인에 더 가까워졌습니다.

Error Code: 1005. Can't create table `covers` (errno: 150 "Foreign key constraint is incorrectly formed")

표는 다음과 같습니다.

CREATE TABLE IF NOT EXISTS `entities` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `type` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)  )
ENGINE = InnoDB
AUTO_INCREMENT = 100001
PARTITION BY KEY() PARTITIONS 10 ;

CREATE TABLE IF NOT EXISTS `covers` (
  `id` BIGINT(20) NOT NULL,
  `title` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)  ,
  CONSTRAINT `covers-id`
    FOREIGN KEY (`id`)
    REFERENCES `entities` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB ;

Workbench에서 설계된 새로운 데이터베이스입니다.Forward Engineer 스크립트에 의해 오류 없이 테이블이 생성되었지만 테이블에 문제가 있는 것 같습니다.

에서 출력 추가show engine innodb status

------------------------
LATEST FOREIGN KEY ERROR
------------------------
2016-06-21 17:42:46 7f7ffa000700 Error in foreign key constraint of table `baka`.`IF`:
Create  table `baka`.`IF` with foreign key constraint failed. Referenced table `baka`.`entities` not found in the data dictionary near '
    FOREIGN KEY (`id`)
    REFERENCES `entities` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB'.

저도 같은 문제가 있었어요.내 일의 근원은 그 테이블들의 엔진이 같지 않다는 것입니다.그래서 제 해결책은 두 테이블에 동일한 엔진을 설치하는 것이었습니다.

분할된 테이블은 다른 테이블의 외부 키 제약 조건으로 참조할 수 없습니다.

여기도 같은 문제입니다.오류는 복원 중인 덤프 파일의 테이블 순서가 잘못되었다는 것입니다.따라서 먼저 문제를 해결하기 위해 참조된 표를 수동으로 작성하면 됩니다.

언급URL : https://stackoverflow.com/questions/37939255/why-is-this-foreign-key-constraint-incorrectly-formed

반응형