코딩기록
[MySQL] 테이블에 ON DELETE CASCADE 설정하기 본문
운동레슨예약 사이트의 회원 탈퇴 기능 구현 중 USER 데이터 삭제가 안되는 문제가 발생했다.
다른 테이블에서 USER 테이블을 FOREIGN KEY로 참조하고 있기 때문이었다.
부모 데이터 삭제 시 자식 데이터를 삭제해주는 ON DELETE CASCADE 설정을 했다.
다음과 같이 만들어진 테이블의 foreign key constraints를 변경할 수 있다.
1. 기존의 foreign key를 지운다
// 기존의 foreign key 지우는 방법
ALTER TABLE table_name DROP FOREIGN KEY foreign_key_symbol
// 실제 사용 예제
alter table certificatel
drop foreign key FKn3ngph1sb2mhouaacn7xy5v29;
2. ON DELETE CASCADE를 포함한 foreign key를 재생성한다.
// ON DELETE CASCADE 포함한 foreign key 재생성
// 괄호가 있는 경우 괄호를 꼭 사용해야 합니다.
ALTER TABLE 자식_table_name
ADD FOREIGN KEY (foreign_key_연결받을_자식_테이블의_column_name)
REFERENCES 부모_table_name (foreign_key_로_가져올_column_name)
ON DELETE CASCADE;
// 실제 사용 예제
alter table certificate
add foreign key (userId)
references user (id)
on delete cascade;
※ 다만, 실제 서비스에서는 이처럼 ON DELETE CASCADE를 설정하여 회원이 탈퇴를 할 때 자식 데이터(게시글, 댓글, 알람)까지 삭제하는 것은 부적절하다고 생각한다. 만들어진 데이터들은 해당 탈퇴회원뿐만 아니라 다른 많은 데이터들과도 상호 관계를 가지기 때문이다.
※ 삭제되는 데이터 외의 다른 연관관계가 있어 남겨둘 필요가 있는 테이블의 데이터라면 ON DELETE SET NULL 을 사용하면 될 것 같다. 이러면 자식 테이블의 참조 컬럼값은 null이 된다.
'백엔드 > DB' 카테고리의 다른 글
[MYSQL] 한 컬럼에 저장된 회원 닉네임과 비회원ID를 각 컬럼에 나누기(Stored Procedure) (1) | 2025.01.05 |
---|