programing

MariaDB: ALTER TABLE 구문을 사용하여 외부 키를 추가하시겠습니까?

kingscode 2022. 9. 8. 22:55
반응형

MariaDB: ALTER TABLE 구문을 사용하여 외부 키를 추가하시겠습니까?

다음 문장이 뭐가 잘못됐나요?

ALTER TABLE submittedForecast
  ADD CONSTRAINT FOREIGN KEY (data) REFERENCES blobs (id);

에러 메세지가 표시됩니다.

Can't create table `fcdemo`.`#sql-664_b` (errno: 150 "Foreign key constraint is incorrectly formed")

MariaDB 10.1.8에서는 다음과 같이 동작합니다.

CREATE TABLE `submittedforecast` (
    `id` INT(11) NOT NULL,
    `data` INT(11) NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `data` (`data`)
) ENGINE=InnoDB;    
CREATE TABLE `blobs` (
    `id` INT(11) NOT NULL,
    `content` BLOB NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB;
ALTER TABLE submittedForecast
  ADD CONSTRAINT FOREIGN KEY (data) REFERENCES blobs (id);

MariaDB 버전 번호와 다음을 포함한 완전한 예를 알려주시겠습니까?CREATE TABLE에 대한 진술submittedForecast그리고.blobs?

이미 이 문제를 해결했는지는 모르겠지만 테이블 간에 엔진과 조합이 모두 일치하는지 확인합니다(예를 들어 latin1에서 latin1로, InnoDB에서 InnoDB로).

저도 같은 문제가 있어서 이걸 바꿔서 어떻게든 작동시켰어요.

같은 문제가 발생했는데, 테이블 구조를 확인한 결과 자녀 테이블의 외부 키 조항이 부모 테이블의 기본 키를 참조하고 있지 않다는 것을 알게 되었습니다.부모 테이블의 기본 키를 참조하도록 변경하자 오류가 사라졌습니다.

같은 에러가 발생하여 실제로 해결하기가 매우 쉽습니다. 제약조건은 다음과 같습니다.

ALTER TABLE submittedForecast ADD CONSTRAINT `fk_submittedForecast` 
  FOREIGN KEY (data) REFERENCES blobs (id)

통합성을 높이려면 쿼리 끝에 추가합니다.

 ON DELETE CASCADE ON UPDATE RESTRICT

이는 다른 필드 오류일 수도 있으므로 테이블 키와 외부 키의 유형이 같고 속성이 동일한지 확인하십시오.

저도 같은 문제가 있었어요.필드의 정의를 확인해보니 한쪽 필드는 INT, 다른 한쪽 필드는 BIGINT로 정의되어 있고 BIGINT 타입을 INT로 변경한 후 외부 키를 생성할 수 있었습니다.

언급URL : https://stackoverflow.com/questions/35864630/mariadb-alter-table-syntax-to-add-a-foreign-key

반응형