맨위로가기

TRUNCATE (SQL)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

TRUNCATE는 SQL에서 사용되는 명령어 중 하나로, 테이블의 모든 행을 삭제하는 데 사용된다. DELETE FROM 명령어와 유사하지만, WHERE 절을 사용할 수 없고, 외래 키 제약 조건이 있는 테이블에서는 사용할 수 없다는 차이점이 있다. 또한, TRUNCATE는 일반적으로 DELETE보다 빠르며, 일부 데이터베이스 시스템에서는 롤백이 불가능하다. TRUNCATE 구문은 TRUNCATE TABLE 테이블명[, 테이블명]이며, TABLE 키워드는 생략 가능하며, SELECT, INSERT, UPDATE, DELETE 등과 같은 다른 SQL 명령어와 함께 사용된다.

더 읽어볼만한 페이지

  • SQL 키워드 - Null (SQL)
    Null은 SQL에서 데이터베이스 테이블 열의 값 부재를 나타내는 특별한 표식으로, 0이나 빈 문자열과 구별되며 삼진 논리와 관련된 특별한 처리 방식으로 인해 데이터베이스 설계 및 쿼리 작성 시 주의가 필요하고 SQL 표준 구현에 대한 논쟁이 존재한다.
  • SQL 키워드 - ALTER (SQL)
    ALTER (SQL)은 SQL에서 데이터베이스 객체의 구조를 변경하는 명령문으로, 테이블에 컬럼을 추가/삭제하거나 이름을 변경하는 데 사용되며, 데이터베이스 시스템에 따라 구문과 사용법이 다르다.
TRUNCATE (SQL)
개요
명령어 종류데이터 정의어(DDL)
용도테이블 내의 모든 데이터를 빠르게 삭제
특징테이블 구조는 유지
삭제된 데이터는 복구 불가 (일반적인 경우)
트랜잭션 로그 기록 최소화 (성능 향상)
구문
기본 구문TRUNCATE TABLE 테이블_이름;
MySQL 구문TRUNCATE 테이블 테이블_이름;
동작 방식
내부 동작테이블의 데이터 페이지 할당 해제 및 초기화
테이블의 메타데이터 (인덱스, 제약 조건 등) 유지
새로운 빈 테이블처럼 작동
트랜잭션 로그최소한의 로깅만 수행 (데이터 삭제 자체는 기록하지 않음)
사용 시 주의사항
제약 조건테이블에 외래 키 제약 조건이 걸려 있는 경우 TRUNCATE 불가능 (제약 조건 해제 후 가능)
트리거(ON DELETE 트리거)가 설정된 경우 TRUNCATE 불가능
권한테이블에 대한 ALTER 권한 필요
트랜잭션TRUNCATE는 암시적 트랜잭션으로 처리 (전체 성공 또는 전체 실패)
롤백 불가능 (일반적인 경우, 일부 DBMS에서는 가능)
복구TRUNCATE TABLE 실행 후 데이터 복구는 매우 어려움 (로그 백업 및 복구 전략 필요)
장단점
장점DELETE TABLE 명령에 비해 훨씬 빠름 (특히 대용량 테이블)
시스템 자원 소비 감소
단점데이터 복구의 어려움
외래 키 제약 조건 및 트리거의 제약
활용 예시
임시 테이블 정리임시 데이터 저장 후 테이블 초기화
대용량 데이터 삭제불필요한 데이터가 많은 테이블 정리
테스트 환경 초기화개발/테스트 데이터 초기화

2. TRUNCATE와 DELETE

`TRUNCATE TABLE` 명령어는 `DELETE FROM` 명령어와 거의 동일하게 작동하지만, 몇 가지 주요 차이점이 있다. `TRUNCATE`는 WHERE 절을 사용할 수 없어 모든 행을 일괄 삭제하며, 대상 테이블에 단독 잠금을 얻는다. 또한 외래 키에서 참조되는 테이블에서는 실행할 수 없는데, 이는 외래 키 무결성을 확인하지 않기 때문이다.

Oracle Database와 MySQL의 일부 스토리지 엔진에서는 TRUNCATE 실행 후 자동으로 커밋이 수행되어 롤백이 불가능하다. 반면, PostgreSQL과 같이 TRUNCATE를 트랜잭션 내에서 실행하여 롤백을 지원하는 데이터베이스도 있다. Microsoft SQL Server에서는 TRUNCATE TABLE 문이 복제 및 로그 전달 대상 테이블에 대해 실행될 수 없는데, 이는 원격 데이터베이스의 일관성을 유지하기 위해 트랜잭션 로그를 사용하기 때문이다.[3]

2. 1. WHERE 절 사용 불가

TRUNCATE는 WHERE 절을 사용하여 특정 행만 삭제할 수 없다. 테이블의 모든 행이 한 번에 삭제된다.[3]

2. 2. 단독 잠금

TRUNCATE는 대상 테이블에 대한 단독 잠금을 얻어 작업을 수행한다.[3]

2. 3. 외래 키 제약

`TRUNCATE TABLE` 명령어는 `DELETE FROM` 명령어와 거의 동일하지만, 외래 키에 의해 참조되는 테이블에서는 실행할 수 없다. 이는 `TRUNCATE`가 외래 키의 무결성을 확인하지 않기 때문이다.[3]

2. 4. 롤백 가능 여부

Oracle Database와 MySQL의 일부 스토리지 엔진은 TRUNCATE 실행 후 자동으로 커밋을 하므로, TRUNCATE를 통한 삭제는 롤백할 수 없다.[3] PostgreSQL처럼 TRUNCATE를 트랜잭션 내에서 실행하여 롤백을 지원하는 데이터베이스도 있는데, 이는 대상 테이블을 "이전 버전"으로 트랜잭션이 완료될 때까지 유지하는 방식으로 구현된다.[3]

2. 5. 트랜잭션 로그와 복제

Microsoft SQL Server에서는 TRUNCATE TABLE 문은 복제 및 로그 전달 대상 테이블에 대해 실행할 수 없다. 이는 원격 데이터베이스의 일관성을 유지하기 위해 트랜잭션 로그를 이용하기 때문이다.[3]

3. 구문

sql

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

```

많은 데이터베이스 제품에서 `TABLE` 키워드는 생략 가능하다.[1]

4. SQL

sql

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

```

대부분의 데이터베이스 제품에서 `TABLE`은 생략할 수 있다.

SQL에서 사용되는 명령어는 다음과 같다.[1]

명령어설명
SELECT데이터를 조회한다.
INSERT데이터를 삽입한다.
UPDATE데이터를 수정한다.
MERGE여러 데이터를 병합한다.
DELETE데이터를 삭제한다.
JOIN여러 테이블의 데이터를 결합한다.
CREATE데이터베이스 객체를 생성한다.
DROP데이터베이스 객체를 삭제한다.
COMMIT트랜잭션 변경 사항을 영구적으로 저장한다.
ROLLBACK트랜잭션 변경 사항을 취소한다.
TRUNCATE테이블의 모든 데이터를 빠르게 삭제한다.
ALTER데이터베이스 객체 구조를 변경한다.
WHERE조건에 맞는 데이터를 선택한다.
SAVEPOINT트랜잭션 내에서 특정 지점을 표시한다.


참조

[1] 웹사이트 ISO/IEC 9075 Database languages SQL https://www.iso.org/[...] 2023-06-04
[2] 웹사이트 Description of the effects of nonlogged and minimally logged operations on transaction log backup and the restore process in SQL Server http://support.micro[...] Microsoft 2005-12-00
[3] 웹인용 Description of the effects of nonlogged and minimally logged operations on transaction log backup and the restore process in SQL Server http://support.micro[...] Microsoft 2005-12-00



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com