> 데이터 베이스 > MySQL 튜토리얼 > MySQL에서 '외래 키 제약 조건을 추가할 수 없습니다' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

MySQL에서 '외래 키 제약 조건을 추가할 수 없습니다' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2025-01-18 20:13:10
원래의
160명이 탐색했습니다.

Why Am I Getting a

MySQL 외래 키 제약 조건 오류: 문제 해결 및 해결 방법

외래 키로 작업할 때 MySQL에서 "ERROR 1215 (HY000): 외래 키 제약 조건을 추가할 수 없습니다."가 발생하는 것은 일반적인 문제입니다. 이 오류는 일반적으로 외래 키 관계를 정의할 때 테이블을 생성하거나 변경하는 동안 발생합니다. 문제는 관련 테이블 간의 불일치로 인해 발생하는 경우가 많습니다.

오류 메시지 자체가 항상 정확한 문제를 지적하는 것은 아닙니다. 구체적인 원인을 진단하려면 다음 명령을 사용하세요.

<code class="language-sql">SHOW ENGINE INNODB STATUS;</code>
로그인 후 복사

실패한 제약 조건에 대한 자세한 내용은 LATEST FOREIGN KEY ERROR 섹션을 확인하세요.

근본 원인 및 해결 방법

가장 빈번한 원인은 외래 키 열(하위 테이블에 있음)과 참조된 기본 키 열(상위 테이블에 있음) 간의 데이터 유형이 일치하지 않기 때문입니다. 예를 들어 하위 테이블 열이 SMALLINT이고 상위 테이블의 기본 키가 INT인 경우 제약 조건이 실패합니다. 데이터 유형은 반드시 정확하게 일치해야 합니다.

테이블을 생성하는 동안, 특히 복잡한 관계를 처리할 때 외래 키 검사를 일시적으로 비활성화하는 것이 가장 좋습니다. 이렇게 하면 종속성을 주문하는 것을 방지할 수 있습니다. 방법은 다음과 같습니다.

<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0;
-- Your table creation statements here
SET FOREIGN_KEY_CHECKS = 1;</code>
로그인 후 복사

예: 데이터 유형 불일치 수정

PatientAppointment 테이블이 오류의 원인이라고 가정해 보겠습니다. Patient.MedicalHistorySMALLINT이고 medicalhistory.MedicalHistoryIDINT이라고 가정합니다. 해결책은 유형 일관성을 보장하는 것입니다.

<code class="language-sql">CREATE TABLE IF NOT EXISTS `Patient` (
  `PatientID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `FName` VARCHAR(30) NULL,
  `LName` VARCHAR(45) NULL,
  `Gender` CHAR NULL,
  `DOB` DATE NULL,
  `SSN` DOUBLE NULL,
  `MedicalHistory` INT UNSIGNED NOT NULL,  -- Data type changed to match
  `PrimaryPhysician` SMALLINT(5) UNSIGNED NOT NULL,
  PRIMARY KEY (`PatientID`),
  UNIQUE INDEX `PatientID_UNIQUE` (`PatientID` ASC),
  CONSTRAINT `FK_MedicalHistory`
    FOREIGN KEY (`MedicalHistory`)
    REFERENCES `doctorsoffice`.`medicalhistory` (`MedicalHistoryID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `FK_PrimaryPhysician`
    FOREIGN KEY (`PrimaryPhysician`)
    REFERENCES `doctorsoffice`.`doctor` (`DoctorID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
) ENGINE = InnoDB;</code>
로그인 후 복사

데이터 유형을 신중하게 일치시키고 권장되는 외래 키 확인 비활성화/활성화 기술을 사용하면 외래 키 제약 조건 오류를 효과적으로 해결하고 MySQL 데이터베이스 내에서 강력한 관계를 구축할 수 있습니다.

위 내용은 MySQL에서 '외래 키 제약 조건을 추가할 수 없습니다' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿