[Spring Boot] JPA+MyBatis 사용하여 외래키 지정, 부모 키 삭제시 자식키도 함께 삭제 시키기!

성 우·2023년 10월 15일
0

JPA+Mybatis 흐름도


외래키를 통한 데이터 동시 삭제

테이블 생성시 CONSTRAINT 로 외래키를 연결해주어야함
이미 자동으로 테이블이 생성되었거나, 생성한 상태라면 아래 쿼리문으로 수동으로 외래키 연결을 해주었습니다.

첫번째 시도

ALTER TABLE review
ADD CONSTRAINT fk_store_idx
FOREIGN KEY (store_idx) REFERENCES store(idx);
java.sql.SQLException: Cannot delete or update a parent row: a foreign key constraint fails (`flambus`.`review_tag`, CONSTRAINT `fk_review_tag_idx` FOREIGN KEY (`review_idx`) REFERENCES `review` (`idx`))

자식까지 함께 삭제할 수 없다고 하네요. 외래키를 걸때 "CASCADE" 옵션을 추가해야 된다고 합니다.

근데 이미 걸었던 외래키 조건을 어떻게 삭제해야하나.. 추가적으로 막 걸면 안될꺼같은데 조건이름도 막무가내로 해서 기억도 안나고 좀 당황스러웠습니다.


현재 테이블의 외래키 조건을 확인하기

-- 제약조건을 확인하고싶다면
SHOW CREATE TABLE review_like;

해당 테이블의 정보를 확인 할 수 있어요!

사진 하단에 보면 CONSTRAINT '조건명' 보이시나요?
내가 추가했던 외래키 조건명을 알았으니 이제 지워봅시다!


외래키 조건 삭제


-- 제약조건 삭제
ALTER TABLE review_like
DROP FOREIGN KEY fk_review_like_idx;

정상적으로 삭제가 됐는지 한번 더 확인해주세요

-- 제약조건을 확인하고싶다면
SHOW CREATE TABLE review_like;

CASCADE 옵션을 추가해서 외래키 걸기


-- review_like 테이블에 외래 키 제약 조건 추가
-- CASCADE 조건을 함께 걸어주면 삭제할때 자식까지 같이 삭제됨.
ALTER TABLE review_like
ADD CONSTRAINT fk_review_like_idx
FOREIGN KEY (review_idx)
REFERENCES review(idx)
ON DELETE CASCADE;

다시 로직에서 JPA 코드를 실행하게되면 review.idx 와 연결되어있는review_like.review_idx,review_tag.review_idx 가 함께 삭제된다!

 reviewRepository.deleteById(reviewIdx);

참고 레퍼런스

https://jydlove.tistory.com/50
https://creamilk88.tistory.com/158

profile
풀스택 개발자가 되고싶은 개발자

0개의 댓글