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>
예: 데이터 유형 불일치 수정
Patient
및 Appointment
테이블이 오류의 원인이라고 가정해 보겠습니다. Patient.MedicalHistory
은 SMALLINT
이고 medicalhistory.MedicalHistoryID
은 INT
이라고 가정합니다. 해결책은 유형 일관성을 보장하는 것입니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!