테이블 생성시 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;
-- 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