-
Foreign key constraint is incorrectly formed 에러 해결Project Trouble Shooting/[EATceed] 몸무게 증량 어플 2023. 12. 31. 22:04728x90
문제 발생
개발집 프로젝트를 배포 중 아래와 같은 오류를 만났다.
Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #8 of class path resource [db/schema.sql]: create table MEAL_FOOD_TB ( MEAL_FOOD_PK bigint auto_increment primary key, CREATED_DATE datetime(6) not null, UPDATED_DATE datetime(6) not null, FOOD_FK bigint null, MEAL_FK bigint null, constraint FKdipb7hg6jdu5764nq3wcnviua foreign key (FOOD_FK) references FOOD_TB (FOOD_PK), constraint FKr2altmd95kev38n36mno92lsi foreign key (MEAL_FK) references MEAL_TB (MEAL_PK) ); nested exception is java.sql.SQLException: (conn=1551) Can't create table `gaebaljip`.`MEAL_FOOD_TB` (errno: 150 "Foreign key constraint is incorrectly formed")
해당 오류는 외래 키 제약 조건에 문제가 있는 것을 알려준다.
필자는 위의 에러를 해결하기 위해 아래의 3가지를 확인하였다.
- 참조하는 외래키의 데이터 타입이 일치하지 않는 경우
- 참조하는 테이블 또는 참조 되는 컬럼이 존재하지 않는 경우
- 테이블의 charset, collation이 다른 경우
내 경우에는 3번째 케이스에 속하였다.
charset이란?
charset은 character set의 줄임말로, 데이터베이스가 문자를 어떻게 해석하고 저장할지 결정하는 규칙의 집합이다.
collation이란?
Collation은 데이터베이스에서 문자열을 비교하고 정렬할 때 사용하는 규칙의 집합이다.
이는 문자열의 대소문자 구분, 악센트 구분, 문자의 정렬 순서 등을 결정한다.
문제 해결
모든 테이블의 schema.sql의 charset과 collate설정을 통일하였다.
CREATE TABLE `MEAL_TB` ( `MEAL_PK` bigint(20) NOT NULL AUTO_INCREMENT, `CREATED_DATE` datetime(6) NOT NULL, `UPDATED_DATE` datetime(6) NOT NULL, `MEAL_TYPE` varchar(255) NOT NULL, `MEAL_FOOD_MULTIPLE` double NOT NULL, `MEMBER_FK` bigint(20) DEFAULT NULL, PRIMARY KEY (`MEAL_PK`), KEY `FK5napxbpjxsev8lnx004fcrqrn` (`MEMBER_FK`), CONSTRAINT `FK5napxbpjxsev8lnx004fcrqrn` FOREIGN KEY (`MEMBER_FK`) REFERENCES `MEMBER_TB` (`MEMBER_PK`) ) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
해결~
728x90'Project Trouble Shooting > [EATceed] 몸무게 증량 어플' 카테고리의 다른 글
개발용 인프라 구축 (2) 2024.03.08 헥사고날 아키텍처 회고 (1) (0) 2024.02.12 리버스 프록시(Reverse Proxy) 설정 (2) 2024.01.22 [Spring Security] @AuthenticationPrincipal을 커스텀 해보자(Feat : ArgumentResolver) (0) 2024.01.11 JPA 대소문자 구별 에러 해결 with MariaDB (0) 2024.01.01