MySQL 외래 키 제약 조건 오류: 문제 해결 및 해결 방법
외래 키로 작업할 때 MySQL에서 "ERROR 1215 (HY000): 외래 키 제약 조건을 추가할 수 없습니다."가 발생하는 것은 일반적인 문제입니다. 이 오류는 일반적으로 외래 키 관계를 정의할 때 테이블을 생성하거나 변경하는 동안 발생합니다. 문제는 관련 테이블 간의 불일치로 인해 발생하는 경우가 많습니다.
오류 메시지 자체가 항상 정확한 문제를 지적하는 것은 아닙니다. 구체적인 원인을 진단하려면 다음 명령을 사용하세요.
SHOW ENGINE INNODB STATUS;
실패한 제약 조건에 대한 자세한 내용은 LATEST FOREIGN KEY ERROR
섹션을 확인하세요.
근본 원인 및 해결 방법
가장 빈번한 원인은 외래 키 열(하위 테이블에 있음)과 참조된 기본 키 열(상위 테이블에 있음) 간의 데이터 유형이 일치하지 않기 때문입니다. 예를 들어 하위 테이블 열이 SMALLINT
이고 상위 테이블의 기본 키가 INT
인 경우 제약 조건이 실패합니다. 데이터 유형은 반드시 정확하게 일치해야 합니다.
테이블을 생성하는 동안, 특히 복잡한 관계를 처리할 때 외래 키 검사를 일시적으로 비활성화하는 것이 가장 좋습니다. 이렇게 하면 종속성을 주문하는 것을 방지할 수 있습니다. 방법은 다음과 같습니다.
SET FOREIGN_KEY_CHECKS = 0; -- Your table creation statements here SET FOREIGN_KEY_CHECKS = 1;
예: 데이터 유형 불일치 수정
Patient
및 Appointment
테이블이 오류의 원인이라고 가정해 보겠습니다. Patient.MedicalHistory
은 SMALLINT
이고 medicalhistory.MedicalHistoryID
은 INT
이라고 가정합니다. 해결책은 유형 일관성을 보장하는 것입니다.
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;
데이터 유형을 신중하게 일치시키고 권장되는 외래 키 확인 비활성화/활성화 기술을 사용하면 외래 키 제약 조건 오류를 효과적으로 해결하고 MySQL 데이터베이스 내에서 강력한 관계를 구축할 수 있습니다.
위 내용은 MySQL에서 '외래 키 제약 조건을 추가할 수 없습니다' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!