이번장에서는 DML에 해당되는 INSERT, DELETE, UPDATE를 배우고 논리삭제와 물리삭제의 차이를 다룬다.
추가하기 - INSERT
INSERT INTO 테이블명
VALUES (값1, 값2, ...)
INSERT는 데이터를 추가할 때 사용한다. 예를 들어 회원가입, 상품추가등에 사용된다.
- 이전에 배운 SELECT는 서버에서 데이터를 조회하고 결과를 반환했다. (서버 -> 클라이언트)
- INSERT는 클라이언트에서 서버로 전송되므로 결과를 반환받지 않는다.
데이터를 추가할 때 전체 열에 값을 추가할수도 있지만 열을 지정할 수도 있다.
INSERT INTO 테이블명 (열1, 열2, ...)
VALUES (값1, 값2, ...)
데이터를 추가할 때 몇 가지 주의점이 있다.
- 해당 열의 데이터 형식에 맞는 값을 지정한다.
- 제약조건(DEFAULT, NOT NULL 등)
앞서 여러 번 다뤘지만 NULL을 다룰 땐 특별히 주의가 필요하다.
삭제하기 - DELETE
DELETE
FROM 테이블명
WHERE 조건식
DELETE는 데이터를 삭제한다. 조건식은 생략이 가능한데 생략 시 모든 행을 대상으로 동작한다. 만약 운영 중인 서비스에서 고객의 데이터 전체를 삭제하면 어떨까? 상상만 해도 등골이 오싹해진다. 따라서 의도한 데이터만 삭제할 수 있도록 조건식 지정을 습관화하자.
갱신하기 - UPDATE
UPDATE 테이블명
SET 열1 = 값1,
열2 = 값2, ...WHERE 조건식
UPDATE는 데이터를 갱신할 때 사용한다. 앞서 다룬 DELETE처럼 조건식 생략이 가능하다. 하지만 모든 행이 갱신된다.
DELETE, UPDATE와 같은 데이터 수정 작업은 더욱 주의가 필요하다. 의도에 맞게 동작할 수 있도록 명령을 작성하자.
물리삭제와 논리삭제
물리삭제와 논리삭제는 데이터를 삭제하는 2가지 방법을 의미한다. 정답이 없고 비즈니스 요구사항에 맞춰 상황에 따라 선택해야 한다.
물리삭제(Hard delete)
- DELETE 명령을 사용해 데이터를 완전히 삭제한다.
논리삭제(Soft delete)
- 데이터가 삭제된 것처럼 표시하는 삭제 방법
- 실제 데이터를 삭제하지 않고 삭제 플래그를 추가하여 상태를 변경한다.
- 휴지통을 예시로 생각하면 편하다. 삭제한 파일이 휴지통으로 가고 완전히 삭제하면 복구할 수 없다.
마치며
논리삭제와, 물리삭제의 개념을 정리할 때 어려웠다. 책에서 설명하는 개념 외에 어떤 표현을 사용해야 이후에 자료를 접해도 기억할 수 있을까라는 관점에서 의문이 들었다. 그런데 파일 삭제를 예시로 떠올리니 쉽게 이해할 수 있었다.
- 논리삭제: 삭제한 파일은 휴지통으로 간다. (플래그를 수정한다)
- 물리삭제: 휴지통에 보관된 파일을 삭제하여 완전히 삭제한다.
물론 물리삭제와, 논리삭제가 데이터베이스에서 학습한 개념이기에 적절한 예제가 아닐 수 있다. 파일의 상태가 클라이언트에게 보여도 괜찮은가라는 의문이 있었는데 논리삭제의 개념과 빗대어 생각해 봤을 때 별다른 문제가 없었다. 이렇게 이해가 잘 되지 않을 땐 일상의 개념과 접목해서 연상하는 것도 괜찮은 방법이라고 느껴 재밌었다.