Land of Joe

[SQL] ERROR 1005: (errno: 150 "Foreign key constraint is incorrectly formed") 본문

🧠 DataBase

[SQL] ERROR 1005: (errno: 150 "Foreign key constraint is incorrectly formed")

Arendt 2023. 10. 22. 16:20

'회원정보 관리'에 관한 테이블을 만들고 데이터 하나 집어 넣는 것까진 성공했고,

 

회원이 작성한 post와 comment에 대한 각각의 테이블을 만들려고 하는데

아무래도 외래키가 잘못되었다는 의미같아서 서칭해보았다. 

CREATE TABLE account (
	idx INT NOT NULL AUTO_INCREMENT,
	id VARCHAR(15) NOT NULL,
	name VARCHAR(10) NOT NULL,
	password VARCHAR(30) NOT NULL,
	email VARCHAR(100) NOT NULL,
	birthday DATE NOT NULL,
	phone_number VARCHAR(11) NOT NULL,
	registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (idx, id)
);

우선 위에 account 테이블 생성에 성공한 SQL ⬆️⬆️⬆️

 

posts 테이블 생성에 실패한 SQL ⬇️⬇️⬇️

CREATE TABLE posts (
	idx INT NOT NULL AUTO_INCREMENT,
	id VARCHAR(15),
	posts MEDIUMTEXT(100000),
	update_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	FOREIGN KEY(idx, id)
	REFERENCES account (id)
);

 

외래키와 기본키 컬럼의 설정이 일치하지 않는 경우 발생하는 오류

 

해결순서 >> 

1. 데이터에 타입이 같은지? -> 기본키가 INT면 외래키도 INT여야 한다!
2. 기본키와 외래키 모두 NOT NULL 체크가 되어 있는지
3. 참조하는 키(REFERENCE KEY)가 기본키 혹은 유니크키로 되어 있는지

 

오류확인 >>

내가 PK(기본키)가 있는 account 테이블에서는 id VARCHAR(15) NOT NULL을 정확히 적어준 반면

FK(외래키)가 있는 posts 테이블에서는 id에 NOT NULL을 적어주지 않은 사실 발견!

 

CREATE TABLE posts (
	idx INT NOT NULL AUTO_INCREMENT,
	id VARCHAR(15) NOT NULL,
	posts TEXT(50000),
	update_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	FOREIGN KEY (idx, id)
	REFERENCES account (idx, id)
);

참고하는 account 테이블의 속성(column) 두 개도 정확히 지정해주고,

외래키에 NOT NULL도 체크 후 터미널에 작성하니 

잘 마무리 되었다👍👍👍

 

 

이젠 새로운 에러가 뜨면

우왕~ 에러 수집 +! 이당~~~ 이라 기쁜 느낌^u^