데이터베이스

데이터베이스(DB) - MYSQL 두 테이블의 컬럼 값 연동하여 통일되게 삭제하기(FOREIGN KEY에서 ON DELETE CASCADE 활용)

isk03300 2023. 12. 4. 11:36

 

MYSQL

 

MYSQL에서 FOREIGN KEY 제약 조건을 생성할 때 ON DELETE CASCADE를 사용하여 부모 테이블에서 행을 삭제할 때 관련된 자식 테이블의 행도 자동으로 삭제할 수 있습니다. 

 

SNS 플랫폼을 예로 들어 설명 해보려한다.

 

아래의 사진을 보면 user_id 3번의 사용자가 올린 image_url 게시물의 개수를 확인할 수 있다. 여기서 회원탈퇴를 예로 들어 해당 유저가 회원 탈퇴를 함으로써 유저가 그동안 올렸던 모든 게시물도 함께 삭제되도록 실행되어야 한다.

하여 우선, 3번 id 유저의 데이터를 삭제 해보도록 하겠다.

 

 

 

 

3번 id 삭제 후 user 컬럼의 데이터 값 확인을 하면 아래처럼 3번 유저의 데이터가 사라진걸 확인할 수 있다.

 

 

 

** 삭제되지 않은 3번 id 유저의 게시물 데이터 **

 

하지만 아래 사진을 보면 id 3번 유저의 user 데이터는 사라졌지만 게시물 데이터는 사라지지 않은걸 확인할 수 있다. 이 상황에서 해당 유저의 정보와 데이터를 한꺼번에 삭제하는 방법을 알아보려 한다.

 

 

 

 

Foreign Key

 

우선 예시의 두 값인 user의 id를 photo 테이블에 연동시켜 주어야 한다. 그러기 위해선 해당 테이블의 foreign keys 탭으로 이동하여 두 테이블의 컬럼을 연동시켜 주도록 한다.

 

 

on delete cascade

 

후에 오른쪽 끝을 보면 ON ELLETE라는 셀렉트 박스 창이 보일텐데 , 클릭하여 CASECADE로 설정한 후 APPLY 버튼을 눌러 설정을 적용해준다. 해당 설정은 연동된 두 테이블의 컬럼 값이 하나의 데이터가 지워지면 그 데이터의 ID를 갖고 있는 다른 모든 데이터도 함께 지워지도록 연동 시켜주는 설정이다.

**설정 전에 INDEX나 기존의 FOREIGN KEY 값이 있으면 설정 에러가 날 수도 있으니 미리 확인하고 작업을 하여야 한다

 

 

 

 

잘 설정 되었는지 확인하기

 

우리는 모든 설정와 준비를 마쳤다. 이제는 결과 값이 잘 나오는지 확인만 해주면 된다. ID  3번 유저의 데이터는 이미 건드려 놨으니 ID 4번 유저의 데이터를 지워보기로 하겠다.

아래 화면처럼 4번 유저의 데이터가 잘 삭제된걸 확인할 수 있다.

이젠 4번 유저의 게시물도 잘 지워졌는지 확인 해보도록 하겠다.

 

 

연동되어 지워진 데이터의 값들.

 

 

아래의 화면처럼 4번 데어터의 항목을 추출한 결과 NULL 로 표시됨에 따라 해당 유저의 게시물들도 함께 삭제 되었음을 확인할 수 있다.

 

 

 

 

 

 

이상으로 오늘의 포스팅을 마치겠습니다.