대충이라도 하자

FK 외래키의 존재, 설정 이유 (cannot add or update a child row: a foreign key constraint fails) 본문

꼬꼬마 개발자 노트

FK 외래키의 존재, 설정 이유 (cannot add or update a child row: a foreign key constraint fails)

Sueeeeee
반응형

데이터베이스에 표를 만들다보면, PK를 설정하는 이유는 확실히 이해했는데

FK 외래키는 그냥 다른 표를 참조한다고만 생각하고 정확하게 깨닫지 못했던 것 같다.

사실 다른 표 참조하는 것도, JOIN으로 가능한데 왜 굳이 해야하는 걸까 의문을 가지고 있었는데...

얼마 전, 또 다른 표를 만들다 보니 데이터의 무결성임을 깨달았다.

사실 데이터의 무결성이라고 하면 직관적으로 이해가 되지 않으니 아래 표를 통해 알아보자.

 

데이터베이스에 위와 같은 표를 참조하려고 했는데 딱히 다른 표를 참조할 필요가 없는 것 같아, 외래키를 설정하지 않았다. 표를 만들고 포스트맨으로 여러 정보를 넣어보며, 테스트를 하고 테이블을 확인했는데 아래와 같은 데이터가 들어있었다. work_id에 90, 899 같은 건 있지도 않은데 넣는 족족 검사도 안하고 그냥 저장해버림...ㅜㅜ

'개발자'라는 유저가 쓴 글은 50까지 밖에 없는데 외래키를 지정해놓지 않으니 글을 저장해놓는 표에 뭐가 들어있는지 

확인도 안하고 막 들어가버린다...

그래서 다시 외래키를 지정하려고 했더니,

cannot add  or update a child row: a foreign key constraing fails 라는 오류가 뜨길래 살펴보니

이미 데이터가 들어있어서 참조 추가가 불가능했다. 그래서 데이터베이스에 있던 데이터를 삭제한 뒤, 참조키를 설정했다. 

 

alter table '테이블이름' add CONSTRAINT work_id foreign key(work_id) references 참조하려는 테이블이름(컬럼);

 

참조키를 추가하고 다시 넣으려고 하니, 참조한 표에 있는 데이터만 들어가게 다시 조정이 되었다!

반응형
Comments