이야기박스

[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