TRUNCATE (SQL)
"오늘의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