TRUNCATE (SQL)

TRUNCATE 또는 TRUNCATE TABLE문은 테이블에서 모든 행을 삭제하는 데이터 정의 언어(DDL)이다. 데이터베이스가 가지고 있는 무결성을 유지하는 메커니즘을 생략하여 빠른 제거를 실현하고 있는 경우가 많다. 삭제할 행 각각을 기록하는 트랜잭션 로그의 출력을 방지함으로써 효율적으로 모든 행을 삭제할 수 있다.

TRUNCATE와 DELETE

‘TRUNCATE TABLE 테이블명’은 ‘DELETE FROM 테이블명’과 거의 동일하지만 다음과 같은 점에서 다르다.

  • WHERE 절을 지정할 수 없다. 모든 행은 일괄 삭제된다.
  • 대상 테이블 단독 잠금을 얻을 수 있다.
  • 외래 키에서 참조되는 테이블에서 실행할 수 없다. 외래 키의 무결성을 확인하지 않기 때문이다.
  • Oracle Database와 MySQL의 일부 스토리지 엔진은 TRUNCATE 후 자동으로 커밋을 한다. TRUNCATE의 삭제는 롤백할 수 없다.
    • PostgreSQL 처럼, TRUNCATE를 트랜잭션 내에서 실행할 수 있으며, 롤백이 가능한 데이터베이스도 존재한다. 대상 테이블을 "이전 버전"으로 트랜잭션이 완료될 때까지 유지하는 것으로 실현되고 있다.
  • Microsoft SQL Server에서는 TRUNCATE TABLE 문은 복제 및 로그 전달 대상이 되고 있는 테이블에 대해 실행할 수 없다. 모두 원격 데이터베이스의 일관성을 유지하기 위해 트랜잭션 로그를 이용하기 때문이다.[1]

구문

TRUNCATE [TABLE] 테이블명 [, 테이블명]

많은 데이터베이스 제품에서 TABLE은 생략 가능하다.

각주

  1. “Description of the effects of nonlogged and minimally logged operations on transaction log backup and the restore process in SQL Server”. Microsoft. December 2005. 
  • v
  • t
  • e
SQL
버전
  • SQL-86
  • SQL-89
  • SQL-92
  • SQL:1999
  • SQL:2003
  • SQL:2008
  • SQL:2011
키워드
  • DELETE
  • FROM
  • HAVING
  • INSERT
  • JOIN
  • MERGE
  • NULL
  • ORDER BY
  • PREPARE
  • SELECT
  • TRUNCATE
  • UNION
  • UPDATE
  • WHERE
  • v
  • t
  • e
개념
개체
SQL
  • SELECT
  • INSERT
  • UPDATE
  • MERGE
  • DELETE
  • JOIN
  • CREATE
  • DROP
  • COMMIT
  • ROLLBACK
  • TRUNCATE
  • ALTER
  • WHERE
  • SAVEPOINT
구성요소
  • 데이터베이스 제품: 관계 데이터베이스 관리 시스템의 비교
  • 데이터베이스 연결 클라이언트
이 글은 소프트웨어에 관한 토막글입니다. 여러분의 지식으로 알차게 문서를 완성해 갑시다.