본문 바로가기

1. DROP 명령어

개념 : 테이블 자체를 삭제하는 명령어

설명

- 해당 테이블 자체가 삭제된다.

- 해당 테이블에 생성되어있던 인덱스, 제약조건 등도 삭제된다.

- 삭제 후 되돌릴 수 없다.

- DROP TABLE [테이블명]

2. TRUNCATE 명령어

개념 : 테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납하는 명령어

설명

- 해당 테이블의 데이터만 모두 삭제되며 테이블 자체가 삭제되는 것은 아니다.

- 해당 테이블에 생성되어있던 인덱스도 함께 삭제된다.

- 조건을 걸지 못해 데이터를 한꺼번에 다 지운다.

- 삭제 후 되돌릴 수 없다.

- DDL이다.

- TRUNCATE TABLE [테이블명]

3. DELETE 명령어

개념 : 테이블의 조건이 맞는 데이터를 삭제한다.

설명

- 데이터만 지워지고 사용하고 있는 디스크 상의 공간은 그대로 가지고 있다.

- 삭제 후 되돌릴 수 있다.

- DML이다.

- DELETE FROM [테이블명] WHERE [조건절]

(WHERE이 없어도 되지만 항상 데이터를 지울때는 where을 먼저 적어서 신중히 없애는 습관을 가지는 것도 좋은 것 같다.)

4. DELETE문과 비교하여 TRUNCATE TABLE의 이점

A. 트랜잭션 로그 공간을 덜 사용한다.

- DELETE문은 행을 한번에 하나씩 제거하고 삭제된 각 행에 대해 트랜잭션 로그에 항목을 기록한다.

- TRUNCATE문은 테이블의 데이터를 저장하는데 사용되는 데이터 페이지의 할당을 취소하는 방식으로 데이터를 제거하며 페이지 할당 취소만을 트랜잭션 로그에 기록한다.

B. 일반적으로 적은 수의 잠금이 사용된다.

- 행 잠금(Lock)을 사용하여 DELETE문을 실행하면 삭제를 위해 데이블의 각 행이 잠긴다.

- TRUNCATE문은 항상 테이블(스키마 잠금 포함)과 페이지를 잠그지만 각 행은 잠그지 않는다.

* Lock이란? 트랜잭션 무결성 및 데이터베이스 일관성을 유지하기 위한 방법으로 다른 사용자가 변경 중인 데이터를 읽을 수 없게 하며 여러 사용자가 동시에 같은 데이터를 변경할 수 없게 한다.

참고 : https://docs.microsoft.com/ko-kr/sql/t-sql/statements/truncate-table-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15

개발의 각궁

Spring | Spring MVC | Spring Boot | Spring Security | Mysql | Oracle | PostgreSQL | Mybatis | JPA | Angular.js | Vue.js | Nuxt.js | React.js | TypeScript | JSP | Frontend | Backend