DROP | TRUNCATE | DELETE | |
분류 | DDL | DDL | DML |
Rollback | 불가능 | 불가능 | commit 이전 rollback 가능 |
Commit | Auto Commit | Auto Commit | 사용자 Commit |
저장공간 (작업 후 용량 감소여부) |
사용했던 저장공간 모두 해제 (용량 감소) |
최초 할당된 저장공간만 남기고 해제 (용량 감소) |
사용했던 저장공간 해제되지 않음 (용량 감소X) |
로그 | 로그 X | 로그 X | 로그 O |
특정 행 삭제 | X | X | 가능 |
1. DROP TABLE
- DDL
- 테이블 구조 자체를 완전히 삭제하는 DROP
- 테이블 자체가 없어지기 때문에 해당 테이블 제거 후 테이블 구조 확인 불가
DROP TABLE 테이블명;
2. TRUNCATE TABLE
- 테이블 구조는 그대로 유지하고 데이터를 전부 삭제하는 TRUNCATE
- 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제함
- 시스템 활용 측면에서 시스템 부하가 적은 TRUNCATE TABLE을 권고함
- 하지만 정상적인 복구가 불가능하므로 사용에 주의가 필요함
- 데이터 구조의 변경 없이 테이블의 데이터를 일괄 삭제 하는 명령어로 DML로 분류할 수도 있지만 내부 처리 방식이나 Auto Commit 특성 등으로 인해 DDL로 분류
TRUNCATE TABLE 테이블명;
3. DELETE
- 테이블의 데이터를 삭제하는 DELETE
DELETE FROM 테이블명;
// FROM 키워드 생략 가능
DELETE 테이블명;
// WHERE절을 사용하여 특정 조건의 데이터 삭제 가능(WHERE절 사용하지 않는 경우 테이블의 전체 데이터 삭제)
DELETE FROM 테이블명 WHERE 조건;
- DML 명령어의 경우 조작하려는 테이블을 메모리 버퍼에 올려놓고 작업을 하기 때문에 실시간으로 테이블에 영향을 미치지 않음, 따라서 버퍼에서 처리한 DML 명령어가 실제로 테이블에 반영되기 위해서는 COMMIT 명령어를 입력하여 트랜잭션을 종료해야함
SQL Server의 경우는 DML의 경우도 AUTO COMMIT으로 처리되기 때문에 실제 테이블에 반영하기 위해 COMMIT 명령어를 입력할 필요가 없다.
테이블의 전체 데이터를 삭제하는 경우, 시스템 활용 측면에서는 삭제된 데이터를 로그로 저장하는 DELETE TABLE 보다는 시스템 부하가 적은 TRUNCATE TABLE을 권고한다. 단, TRUNCATE TABLE의 경우 삭제된 데이터의 로그가 없으므로 ROLLBACK이 불가능하므로 주의해야 한다. 그러나 SQL Server의 경우 사용자가 임의적으로 트랜잭션을 시작한 후 TRUNCATE TABLE을 이용하여 데이터를 삭제한 이후 오류가 발견되어, 다시 복구를 원할 경우 ROLLBACK 문을 이용하여 테이블 데이터를 원 상태로 되돌릴 수 있다. |
'DB' 카테고리의 다른 글
[SQL] CASE 표현 (0) | 2023.03.06 |
---|---|
[SQL] NULL 관련 함수 (0) | 2023.03.06 |
[SQL] DCL 예제 (0) | 2023.03.02 |
📝 NoSQL이란? (0) | 2022.11.16 |
SQL 마무리 정리 (0) | 2022.11.03 |