제목 그대로 회원탈퇴를 했는데 게시판 목록에 회원탈퇴한 사용자의 기록이 남는 애로사항이 있습니다.

 

먼저 어떤 오류인지 확인해볼까요?

 

 

먼저 gggg라는 사용자가 글을 작성했습니다.

하지만 사용자가 저희의 사이트가 마음에 들지 않아 회원탈퇴를 하였는데요

 

 

 

 

이제 게시판으로 가보겠습니다.

 

 

 

분명히 gggg라는 사용자가 회원탈퇴를 했지만 기록이 그대로 남아 있습니다.

 

저희는 사용자가 회원탈퇴를 하면 게시판에 있는 기록들도 모두 폐기하고 싶습니다.

바로 foreign key를 이용하는 것인데요.

 

user 테이블에는 identification 컬럼이 있습니다.

foreign key를 사용하려면 board 테이블에도 identification 컬럼이 있어야 합니다.(굳이 같을 필요는 없습니다. 편의를 위해!)

우선 board 테이블에 identification 컬럼을 추가하겠습니다.

 

alter table board add identification varchar(50) not null;

 

 

identification 컬럼이 추가되었습니다.

 

이제 foreign key를 추가 해보겠습니다.

 

alter table board add CONSTRAINT fk_user FOREIGN KEY (identification) REFERENCES user(identification) ON DELETE CASCADE;

 

ON DELETE CASCADE


- 외래 키에서 참조하는 키가 포함된 행을 삭제하려고 하면 해당 외래 키가 포함되어 있는 모든 행도 삭제


ON UPDATE CASCADE


- 외래 키에서 참조하는 키 값이 포함된 행에서 키 값을 업데이트 하면 해당 외래 키를 구성하는 모든 값도 키에 지정된 새 값으로 업데이트되도록 지정


해당 쿼리를 실행하고 워크벤치에 디렉터리 구조를 보면

 

 

정상적으로 foreign key가 생겼습니다.

 

아 그리고 좀전에

alter table board add identification varchar(50) not null; 

해당 컬럼을 추가했는데 조건을 not null로 했기 때문에

 

/board/register.sjp의 해당 코드를 추가하겠습니다.

 

<div>
	<label for="identification">아이디</label>
	<input type="text" name="identification" id="identification" value="${user.identification}" readonly="readonly" required/>		
</div>
			
<div>
	<label for="name">작성자</label>
	<input type="text" name="name" id="name" value="${user.name}" readonly="readonly" required/>		
</div>

 

identification 컬럼을 추가했는데 글작성 기능에서 identification 데이터를 넣어주지 않으면 에러가 발생합니다!

 

boardMapper.xml도 수정하겠습니다.

 

<insert id="create">
	insert into board (title, contents, identification, name)
	values( #{title}, #{contents}, #{identification}, #{name})
</insert>

 

identification을 추가했습니다.

 

 

해당 코드는 테이블의 정보를 보여주는 쿼리 인데요

show full columns from board;

 

아까 alter로 넣어준 컬럼들이 제대로 실행됐는지 확인 해보겠습니다.

 

 

정상적으로 들어갔네요!

 

이제 글과 댓글을 작성하고 회원을 삭제해보겠습니다.

 

 

 

데이터가 정상적으로 삭제되었습니다.

+ Recent posts