MySQL에서 외래 키 제약 조건을 추가할 수 없음 오류를 수정하는 방법은 무엇입니까?
게시 됨: 2022-12-22" MySQL Cannot Add Foreign Key Constraint " 오류를 어떻게 수정합니까? MySQL 테이블에 외래 키 제약 조건을 추가하려고 할 때 다음 오류 메시지가 표시될 수 있습니다. “ ERROR 1215(HY000): 외래 키 제약 조건을 추가할 수 없습니다 .
이와 같은 오류는 매우 일반적이며 MySQL이 외래 키 제약 조건을 테이블에 삽입할 수 없는 구체적인 이유에 대한 구체적인 세부 정보를 제공하지 않습니다. 이 문제를 해결하려면 문제의 정확한 원인을 파악해야 합니다.
이 글에서는 MySQL의 “#1215 – Cannot Add Foreign Key Constraint” 에러가 발생하는 이유와 그 원인을 찾는 방법, 효과적인 4가지 방법으로 해결하는 방법에 대해 설명합니다.
MySQL "#1215 – Cannot Add Foreign Key Constraint" 오류가 발생하는 이유는 무엇입니까?
이 오류의 원인은 다양할 수 있습니다. 이 오류의 원인을 확인하려면 SHOW ENGINE INNODB STATUS의 LATEST FOREIGN KEY ERROR 섹션을 검토하는 것이 가장 좋습니다.
이렇게 하면 문제를 더 잘 이해할 수 있습니다. 다음 목록에서 사례를 식별할 수 있습니다.
일반적으로 덤프를 로드할 때 제약 조건이 참조하는 테이블 또는 인덱스가 존재하지 않습니다.
경우에 따라 고객이 제약 조건을 추가하려는 데이터베이스 테이블이 존재하지 않아 1215 오류 메시지가 표시됩니다.
그러나 테이블이 존재하지 않는다는 표시가 없으므로 명령을 사용하여 데이터베이스에서 사용 가능한 테이블을 판별하는 것이 좋습니다.
각 상위 테이블에서 SHOW TABLES 또는 SHOW CREATE TABLE을 실행하십시오. 오류 1146을 반환하는 모든 테이블은 테이블이 잘못된 순서로 생성되었음을 나타냅니다.
해결 방법은 누락된 CREATE TABLE을 실행하고 다시 시도하거나 외래 키 검사를 일시적으로 비활성화하는 것입니다. 순환 참조가 있을 수 있는 백업 복원 중에 이 단계를 수행하는 것이 중요합니다.
다음 코드를 실행하여 오류를 수정합니다.
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS; SET FOREIGN_KEY_CHECKS=0; SOURCE /backups/mydump.sql; -- restore your backup within THIS session SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
제약 조건의 테이블 또는 인덱스는 따옴표를 잘못 사용합니다.
이 오류를 진단하려면 각 FOREIGN KEY 선언을 검사하고 개체 한정자 주위에 따옴표가 없는지 또는 테이블 주위에 따옴표가 있고 각 열 이름 주위에 한 쌍이 있는지 확인하십시오.
아무 것도 인용하지 않거나 테이블과 열을 별도로 인용하면 이 문제를 해결할 수 있습니다.
제약 조건 참조의 로컬 키, 외래 테이블 또는 열에 오타가 있습니다.
SHOW TABLES 및 SHOW COLUMNS를 실행하고 문자열을 REFERENCES 선언에 지정된 문자열과 비교하여 이 오류를 진단할 수 있습니다. 오타는 발견되는 즉시 수정해야 합니다.
제약 조건이 참조하는 열이 외부 열과 동일한 유형 또는 너비가 아닙니다.
진단을 위해 SHOW CREATE TABLE 부모를 사용하여 로컬 열과 참조 열이 동일한 유형의 데이터와 너비를 포함하는지 확인합니다.
하위 테이블의 열 정의가 상위 테이블의 열 정의와 일치하도록 DDL 문을 편집하여 문제를 해결할 수 있습니다.
외부 개체는 어떤 종류의 KEY도 아닙니다.
이 문제를 진단하려면 SHOW CREATE TABLE 상위 항목을 사용하여 테이블의 REFERENCES 부분을 검사하여 이를 가리키는 열이 인덱싱되지 않았는지 확인하십시오.
열을 KEY, UNIQUE KEY 또는 PRIMARY KEY로 만들어 문제를 해결하십시오.
외래 키는 다중 열 PK 또는 UK이며 참조 열은 가장 왼쪽 열이 아닙니다.
이 오류를 진단하려면 SHOW CREATE TABLE 상위 명령을 수행하여 REFERENCES 부분이 일부 다중 열 인덱스에 있지만 정의에서 가장 왼쪽에 있지 않은 열을 가리키는지 여부를 확인합니다.
참조 열이 가장 왼쪽 또는 유일한 열인 상위 테이블에 인덱스를 추가하여 문제를 해결할 수 있습니다.
두 테이블/열 간의 다른 문자 집합/데이터 정렬
문제를 진단하려면 SHOW CREATE TABLE parent를 실행하고 하위 열의 CHARACTER SET 및 COLLATE 부분이 상위 테이블의 부분과 일치하는지 확인하십시오.
이 문제를 해결하려면 자식 테이블 DDL이 부모 테이블/열의 문자 집합 및 데이터 정렬과 일치하는지 확인하거나 부모 테이블을 ALTER하여 해당 정의가 자식 정의와 일치하도록 합니다.
상위 테이블이 InnoDB를 사용하지 않습니다.
문제는 SHOW CREATE TABLE parent를 실행하고 ENGINE=INNODB를 확인하여 진단할 수 있습니다.
이 문제를 해결하려면 상위 테이블을 ALTER MySQL에서 InnoDB로 전환하십시오.
"Cannot Add Foreign Key Constraint" 오류의 원인을 찾는 방법은 무엇입니까?
이 오류는 테이블에 대한 외래 키 제약 조건을 구현할 수 없는 MySQL의 특정 이유를 나타내지 않습니다. 이는 매우 일반적입니다.
이 문제를 해결하려면 정확한 원인을 파악해야 합니다. MySQL 클라이언트에서 다음 쿼리를 실행하여 이를 수행할 수 있습니다.
SHOW ENGINE INNODB STATUS;
이 쿼리에서 세 개의 필드(유형, 이름 및 상태)가 반환됩니다. LATEST FOREIGN KEY ERROR는 결과의 상태 열을 확장하여 식별할 수 있습니다.
이 섹션은 문제를 해결할 수 있도록 마지막 변경 쿼리가 실패한 이유를 식별하는 것을 목표로 합니다.
일반적으로 이 문제의 원인으로 기본 테이블과 외부 테이블의 열 유형이 일치하지 않습니다.
이 문제는 MyISAM 및 InnoDB와 같은 두 테이블의 엔진 유형 간의 불일치로 인해 발생할 수도 있습니다.
하나는 UTF-8을 사용하고 다른 하나는 latin1을 사용하는 테이블 간의 데이터 정렬이 다르기 때문에 가능합니다.
다음 요소에 주의를 기울여야 합니다.
엔진 : 각 테이블은 동일한 데이터베이스 엔진(예: InnoDB)으로 구성되어야 합니다.
데이터 유형 : 하나의 테이블에서 두 열의 datatype. int(11)
datatype. int(11)
"과 달리 smallint(5)
는 문제를 일으킵니다.
Collation : 호환성을 보장하기 위해 두 열의 문자 집합이 동일해야 합니다(예: UTF8).
주의 : 테이블에 동일한 데이터 정렬이 있더라도 열은 여전히 다른 열을 가질 수 있습니다.
Unique : 외래 키는 참조 테이블의 고유한 필드(일반적으로 기본 필드)를 참조해야 합니다.
Ungisned : 한 테이블에는 서명되지 않은 키가 있고 다른 테이블에는 서명되지 않은 키가 없을 수 있습니다.
MySQL "#1215 – Cannot Add Foreign Key Constraint" 오류를 수정하는 방법(4가지 방법)?
이 오류 메시지의 다양한 원인을 논의한 후 다음 단계로 넘어갔습니다. 이 오류는 수정해야 하므로 네 가지 효과적인 방법으로 수정하는 방법을 살펴보겠습니다.
방법 1: 테이블 가용성 확인
오류 문제 해결을 시작하려면 다음 명령을 실행하여 테이블이 존재하는지 확인할 수 있습니다.
show tables;
이 코드에서 테이블을 사용할 수 있기 때문에 제약 조건을 만들 수 있음이 분명합니다.
방법 2: 부모 테이블이 InnoDB를 사용하고 있는지 확인
데이터베이스 테이블에 설정된 스토리지 엔진을 확인하여 추가 조사를 수행할 수 있습니다. 이를 위해 다음 명령을 사용할 수 있습니다.
SHOW CREATE TABLE parent
그 결과 InnoDB가 스토리지 엔진이 아님을 알 수 있습니다. ENGINE=MYISAM으로 설정되었으므로 다음 명령을 실행하여 스토리지 엔진을 변경할 수 있습니다.
ALTER TABLE parent ENGINE=INNODB;
마지막으로 이 방법으로 오류를 수정할 수 있습니다.
방법 3: 부적절한 따옴표가 있는지 확인
모든 FOREIGN KEY 선언에 대해 개체 한정자 주위에 따옴표가 삽입되지 않았는지 또는 별도의 따옴표가 테이블 및 열 이름을 둘러싸고 있는지 확인하십시오.
이 방법을 사용하면 아무 것도 인용하지 않거나 열과 테이블을 별도로 인용하여 오류를 수정해야 합니다.
방법 4: 키 존재 여부 확인
MySQL 명령을 입력할 때 올바른 명령이 입력되었는지 확인해야 합니다. 교차 확인은 고객이 대상 테이블에 존재하지 않는 테이블 키를 참조하지 않도록 합니다.
따라서 테이블에 있는 키를 사용하는 방법에 대한 고객의 수정이 필요합니다. 경우에 따라 ON DELETE SET NULL에 사용 중인 열에 null 정의가 없을 수 있습니다.
MySQL 오류 1215를 방지하려면 열이 기본 null 값으로 설정되어 있는지 확인해야 합니다.
결론
이 글에서는 MySQL의 “#1215 – Cannot Add Foreign Key Constraint” 오류가 발생하는 이유와 그 원인을 찾는 방법, 효과적인 4가지 방법으로 해결하는 방법에 대해 설명했습니다.
시간을 내어 이 기사를 검토해 주셔서 감사합니다. 당신에게 그것을 제시하는 것은 우리의 기쁨입니다. 의견 섹션에 질문이나 의견을 게시하십시오.
최신 뉴스를 최신 상태로 유지하려면 Facebook 및 Twitter 페이지를 좋아하고 팔로우하십시오.