>데이터 베이스 >MySQL 튜토리얼 >SQL의 TRUNCATE와 DELETE: 언제 어느 것을 사용해야 합니까?

SQL의 TRUNCATE와 DELETE: 언제 어느 것을 사용해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-15 06:52:44119검색

TRUNCATE vs. DELETE in SQL: When Should I Use Which?

SQL에서 TRUNCATE와 DELETE의 차이점

TRUNCATE와 DELETE는 SQL에서 테이블 데이터를 삭제할 때 두 가지 옵션을 제공합니다. 정보에 입각한 결정을 내리려면 서로 다른 특성을 이해하는 것이 중요합니다.

개요

데이터를 유지하지 않고 테이블의 모든 행을 빠르게 삭제하는 것이 목표라면 일반적으로 TRUNCATE가 DELETE보다 빠릅니다. 그러나 시스템별 요인도 고려해야 합니다.

진술 유형

TRUNCATE는 데이터 정의 언어(DDL) 문으로 분류되는 반면, DELETE는 데이터 조작 언어(DML) 문으로 분류됩니다. 이러한 구별은 특정 상황에서의 행동에 영향을 미칩니다.

커밋 및 롤백

데이터베이스 공급업체에 따라 TRUNCATE는 롤백이 가능하거나 불가능할 수 있습니다. PostgreSQL 및 SQL*Server에서는 TRUNCATE의 롤백을 허용하는 반면 Oracle은 이를 커밋된 작업으로 처리합니다.

공간 재활용

TRUNCATE는 할당된 데이터 세그먼트를 해제하여 저장 공간을 회수합니다. 반면 DELETE는 삭제된 행이 차지하는 공간을 유지합니다.

행 범위

TRUNCATE는 테이블의 모든 행을 삭제하는 반면, DELETE는 조건에 따라 특정 행을 대상으로 지정할 수 있습니다.

객체 유형

TRUNCATE는 테이블이나 전체 클러스터에 적용될 수 있습니다(공급업체에 따라 다름). DELETE는 클러스터의 테이블과 테이블에서 작동합니다.

데이터 객체 식별자

Oracle에서 DELETE는 데이터 개체 ID에 영향을 미치지 않지만 TRUNCATE는 이전에 테이블에 데이터가 삽입되지 않은 경우 새 ID를 할당합니다.

플래시백(오라클)

DELETE는 플래시백을 지원하므로 데이터를 이전 상태에서 복원할 수 있습니다. 반면에 TRUNCATE는 잘림 이전 상태로 플래시백되는 것을 방지합니다. 그러나 Oracle 11gR2의 FLASHBACK ARCHIVE 기능은 이 문제를 완화할 수 있습니다.

권한

TRUNCATE 권한을 부여하는 기능은 공급업체에 따라 다릅니다. Oracle에는 DROP ANY TABLE 권한이 필요하지만 다른 시스템에서는 특정 사용자나 역할에 이 권한을 부여할 수 있습니다.

색인

Oracle의 TRUNCATE는 사용할 수 없는 인덱스를 다시 활성화합니다. DELETE에는 이 효과가 없습니다.

외래 키

테이블에 대한 활성 외래 키 참조가 있는 경우 TRUNCATE를 수행할 수 없습니다. DELETE의 동작은 외래 키 구성에 따라 달라집니다.

트리거

DDL 트리거는 TRUNCATE 작업으로 활성화할 수 있지만 DML 트리거는 실행되지 않습니다.

원격 실행

Oracle에서는 데이터베이스 링크를 통해 TRUNCATE를 수행할 수 없습니다.

ID 열

SQL*Server에서 TRUNCATE는 IDENTITY 열의 순서를 재설정하지만 DELETE는 그렇지 않습니다.

위 내용은 SQL의 TRUNCATE와 DELETE: 언제 어느 것을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.