본문 바로가기

Language/MySQL

[MySQL] 물리삭제와 논리삭제

데이터베이스에서 데이터를 삭제하는 방법은 용도에 따라 크게 '물리 삭제'와 '논리 삭제' 두 가지로 나뉜다.

이는 SQL 명령이 두가지 존재한다는 의미가 아닌 데이터를 삭제하는데 두 가지 사고방식이 있다는 뜻이다.

 

 물리삭제 

SQL의 DELETE 명령을 사용해 직접 데이터를 삭제하는 사고방식이다. 삭제 대상 데이터는 필요 없는 데이터이므로 DELETE 명령을 실행해서 테이블에서 삭제해버리자 라는 지극히 자연스러운 발상에 의한 삭제 방법이다.

 

사용자의 개인정보를 다루는 시스템에서 탈퇴한 경우 데이터를 삭제하는 경우 개인정보 유출을 방지하는 측면에서 물리 삭제를 하는 편이 좋은 선택이라 할 수 있다.

 

 논리 삭제 

테이블에 '삭제 플래그'와 같은 열을 미리 준비해 둔다. 즉, 테이블에서 실제로 행을 삭제하는 대신 UPDATE 명령을 이용해 '삭제 플래그'의 값을 유효하게 갱신해 두나는 발상에 의한 삭제 방법이다. 실제 테이블 안에 데이터는 남아있지만, 참조할 때는 '삭제 플래그'가 삭제로 설정된 행을 제외하는 SELECT 명령을 실행한다. 결과적으로 해당 행이 삭제된 것처럼 보인다.

실질적으로 데이터를 삭제하지 않기 때문에 삭제되기 전의 상태로 간단히 되돌릴 수 있다는 장점이 있는 반면, 삭제해도 데이터베이스 공간이 늘어나지 않고, 데이터베이스 크기가 증가함에 따라 검색 속도가 떨어진다는 단점이 있다.

 

쇼핑 사이트에서 사용자가 주문을 취소하는 경우도 데이터를 삭제하는데, 이때 논리 삭제를 많이 사용한다. 주문이 취소되었다고는 해도 발주는 된 것으로, 해당 정보가 완전히 불필요한 것이라 말할 수 없기 때문이다. 이러한 데이터는 주문 관련 통계를 낼 때 유용하게 사용할 수 있다.

'Language > MySQL' 카테고리의 다른 글

[MySQL] COUNT 이외의 집계 함수  (0) 2022.11.11
[MySQL] 행 개수 구하기 - COUNT  (1) 2022.11.04
[MySQL] 데이터 갱신하기 - UPDATE  (0) 2022.10.02
[MySQL] 삭제하기 - DELETE  (1) 2022.09.30
[MySQL] 행 추가하기 - INSERT  (0) 2022.09.28