이야기박스
[MariaDB] errno: 150 "Foreign key constraint is incorrectly formed" 본문
Computer & Data/Big Data
[MariaDB] errno: 150 "Foreign key constraint is incorrectly formed"
박스님 2018. 12. 11. 22:07반응형
두 개의 테이블 생성하는 도중에 에러가 발생했습니다.
첫 번째 테이블을 생성하고, 두 번째 테이블에서 첫 번째 테이블의 PK를 FK로 써서 만들려고 하는데, 여기서 에러가 발생하였습니다.
errno: 150 "Foreign key constraint is incorrectly formed"
열심히 구글링 해본 결과, 이 에러가 발생하는 경우는 보통 이렇다고 하네요
1. 데이터 타입이 같은가
2. NOT NULL or NULL 여부가 동일 한가
3. 참조받는 데이터가 unique key / primary key 인가
4. 두 테이블의 charset 이 같은가
근데 저의 경우는 모두 만족시켜줘도 에러가 계속 발생하더라구요..
열심히 테스트 해본 결과, 참조받는 테이블의 경우 pk가 2개인데, 참조하는 테이블은 하나만 fk로 사용하려고 하니 발생하는 에러였습니다.
[기존 쿼리]
CREATE TABLE astro_crallwer.rule_meta
(
zone VARCHAR(45) NOT NULL ,
rule_name VARCHAR(45) NOT NULL ,
rule_reg_datetime DATETIME NULL ,
PRIMARY KEY (zone, rule_name)
);
CREATE TABLE astro_crallwer.api_info
(
rule_name VARCHAR(45) NOT NULL ,
api_url VARCHAR(500) NULL ,
api_parameters VARCHAR(500) NULL ,
api_has_date TINYINT NULL ,
api_date_offset INT NULL ,
foreign key (rule_name) references astro_crallwer.rule_meta (rule_name) on update cascade on delete cascade
);
rule_meta 테이블의 zone pk를 없애니 정상 동작하네요.
[변경 쿼리]
CREATE TABLE astro_crallwer.rule_meta
(
rule_name VARCHAR(45) NOT NULL ,
rule_reg_datetime DATETIME NULL ,
PRIMARY KEY (rule_name)
);
CREATE TABLE astro_crallwer.api_info
(
rule_name VARCHAR(45) NOT NULL ,
api_url VARCHAR(500) NULL ,
api_parameters VARCHAR(500) NULL ,
api_has_date TINYINT NULL ,
api_date_offset INT NULL ,
foreign key (rule_name) references astro_crallwer.rule_meta (rule_name) on update cascade on delete cascade
);
왜 이런걸까요.. 지금은 졸리니 나중에 찾아봐야겠습니다.
반응형
'Computer & Data > Big Data' 카테고리의 다른 글
hive query 에러 (0) | 2018.12.14 |
---|---|
java jdbc hive connection 이슈 (1) | 2018.12.14 |
What is ORC File Format? (0) | 2018.12.05 |
Nomalization (정규화) (0) | 2018.10.25 |
LMAX Architecture - Disruptor (2) | 2018.10.10 |