[sql] SQL에서 TRUNCATE와 DELETE의 차이점은 무엇입니까?

SQL TRUNCATEDELETESQL 의 차이점은 무엇입니까 ?

귀하의 답변이 플랫폼에 특정한 경우, 그 사실을 알려주십시오.



답변

차이점 목록은 다음과 같습니다. 오라클 고유의 기능을 강조했으며 커뮤니티가 다른 공급 업체의 특정 차이점을 추가 할 수 있기를 바랍니다. 대부분의 공급 업체에 공통적 인 차이점은 아래에 강조된 차이점과 함께 제목 바로 아래로 갈 수 있습니다.


일반 개요

테이블에서 모든 행을 빠르게 삭제하고 실제로 행을 원하고 테이블에 대해 외래 키가 없으면 TRUNCATE가 DELETE보다 빠를 것입니다. .

아래에 자세히 설명 된 것처럼 다양한 시스템 별 문제를 고려해야합니다.


명세서 유형

삭제는 DML, 잘림은 DDL입니다 ( DDL 및 DML이란 무엇입니까? ).


커밋 및 롤백

공급 업체에 따라 다름

SQL * 서버

잘라내기를 롤백 할 수 있습니다.

PostgreSQL

잘라내기를 롤백 할 수 있습니다.

신탁

TRUNCATE는 DDL이므로 명령문 실행 전과 후에 두 개의 커밋이 관련됩니다. 따라서 잘라내기를 롤백 할 수 없으며 잘라 내기 프로세스의 실패로 인해 커밋이 발행됩니다.

그러나 아래의 플래시백을 참조하십시오.


우주 매립

삭제는 공간을 복구하지 않습니다, 잘라내 기는 공간을 복구합니다

신탁

REUSE STORAGE 절을 사용하면 데이터 세그먼트가 할당 해제되지 않으므로 테이블을 데이터와 함께 다시로드하는 경우 약간 더 효율적일 수 있습니다. 최고 워터 마크가 재설정됩니다.


행 범위

삭제는 모든 행을 제거하거나 행의 서브 세트 만 제거하는 데 사용할 수 있습니다. 잘림은 모든 행을 제거합니다.

신탁

테이블이 분할되면 개별 파티션이 분리되어 잘릴 수 있으므로 모든 테이블 데이터를 부분적으로 제거 할 수 있습니다.


객체 유형

클러스터 내의 테이블 및 테이블에 삭제를 적용 할 수 있습니다. 잘림은 테이블 또는 전체 클러스터에만 적용됩니다. (Oracle 전용 일 수 있음)


데이터 객체 아이덴티티

신탁

삭제는 데이터 오브젝트 ID에 영향을 미치지 않지만 , 테이블 작성 이후 테이블에 대한 삽입이없는 경우를 제외 하고 truncate는 새 데이터 오브젝트 ID를 지정합니다. 롤백 된 단일 삽입이라도 절단시 새 데이터 오브젝트 ID가 지정됩니다. .


플래시백 (오라클)

플래시백은 삭제에서 작동하지만 잘림은 플래시가 작업 전에 상태로 돌아가는 것을 방지합니다.

그러나 11gR2부터 FLASHBACK ARCHIVE 기능은 Express Edition을 제외하고이를 허용합니다.

Oracle에서 플래시백 사용
http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638


특권

변하기 쉬운

신탁

테이블에서 다른 사용자 나 역할에게 삭제 권한을 부여 할 수 있지만 DROP ANY TABLE 권한 부여를 사용하지 않으면 절단을 수행 할 수 없습니다.


재실행 / 실행 취소

삭제는 소량의 재실행 및 대량의 실행 취소를 생성합니다. 자르기는 무시할만한 양을 생성합니다.


인덱스

신탁

자르기 조작은 사용할 수없는 색인을 다시 사용할 수있게합니다. 삭제하지 않습니다.


외래 키

활성화 된 외래 키가 테이블을 참조 할 때는 잘림을 적용 할 수 없습니다. 삭제 처리는 외래 키의 구성에 따라 다릅니다.


테이블 잠금

신탁

자르기에는 독점 테이블 잠금이 필요하고 삭제에는 공유 테이블 잠금이 필요합니다. 따라서 테이블 잠금을 비활성화하면 테이블에서 잘림 작업을 방지 할 수 있습니다.


트리거

자르면 DML 트리거가 실행되지 않습니다.

신탁

DDL 트리거를 사용할 수 있습니다.


원격 실행

신탁

데이터베이스 링크를 통해 잘라낼 수 없습니다.


신원 열

SQL * 서버

잘림은 IDENTITY 열 유형의 시퀀스를 재설정하지만 삭제는 수행하지 않습니다.


결과 세트

대부분의 구현에서 DELETE명령문은 삭제 된 행을 클라이언트로 리턴 할 수 있습니다.

예를 들어 Oracle PL / SQL 서브 프로그램에서 다음을 수행 할 수 있습니다.

DELETE FROM employees_temp
WHERE       employee_id = 299
RETURNING   first_name,
            last_name
INTO        emp_first_name,
            emp_last_name;


답변

자르기와 삭제의 차이점은 다음과 같습니다.

+----------------------------------------+----------------------------------------------+
|                Truncate                |                    Delete                    |
+----------------------------------------+----------------------------------------------+
| We can't Rollback after performing     | We can Rollback after delete.                |
| Truncate.                              |                                              |
|                                        |                                              |
| Example:                               | Example:                                     |
| BEGIN TRAN                             | BEGIN TRAN                                   |
| TRUNCATE TABLE tranTest                | DELETE FROM tranTest                         |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
| ROLLBACK                               | ROLLBACK                                     |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
+----------------------------------------+----------------------------------------------+
| Truncate reset identity of table.      | Delete does not reset identity of table.     |
+----------------------------------------+----------------------------------------------+
| It locks the entire table.             | It locks the table row.                      |
+----------------------------------------+----------------------------------------------+
| Its DDL(Data Definition Language)      | Its DML(Data Manipulation Language)          |
| command.                               | command.                                     |
+----------------------------------------+----------------------------------------------+
| We can't use WHERE clause with it.     | We can use WHERE to filter data to delete.   |
+----------------------------------------+----------------------------------------------+
| Trigger is not fired while truncate.   | Trigger is fired.                            |
+----------------------------------------+----------------------------------------------+
| Syntax :                               | Syntax :                                     |
| 1) TRUNCATE TABLE table_name           | 1) DELETE FROM table_name                    |
|                                        | 2) DELETE FROM table_name WHERE              |
|                                        |    example_column_id IN (1,2,3)              |
+----------------------------------------+----------------------------------------------+


답변

하락

DROP 명령은 데이터베이스에서 테이블을 제거합니다. 모든 테이블의 행, 인덱스 및 권한도 제거됩니다. DML 트리거가 실행되지 않습니다. 작업을 롤백 할 수 없습니다.

절단

TRUNCATE는 테이블에서 모든 행을 제거합니다. 작업을 롤백 할 수 없으며 트리거가 발생하지 않습니다. 따라서 TRUNCATE는 빠르며 DELETE만큼 실행 취소 공간을 많이 사용하지 않습니다. 절단시 테이블 레벨 잠금이 추가됩니다.

지우다

DELETE 명령은 테이블에서 행을 제거하는 데 사용됩니다. WHERE 절은 일부 행만 제거하는 데 사용할 수 있습니다. WHERE 조건을 지정하지 않으면 모든 행이 제거됩니다. DELETE 조작을 수행 한 후 변경 사항을 영구적으로 만들거나 실행 취소하려면 트랜잭션을 커미트 또는 롤백해야합니다. 이 작업으로 인해 테이블의 모든 DELETE 트리거가 시작됩니다. 삭제할 때 행 레벨 잠금이 추가됩니다.

보낸 사람 : http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands


답변

추가해야 할 모든 좋은 답변 :

이후 TRUNCATE TABLEDDL (이다 데이터의 해상력 언어 )가 아닌 DML ( 데이터 조작 Langauge ) 명령의는 Delete Triggers실행되지 않습니다.


답변

삭제 대 SQL 서버에서 자르기 요약
전체 기사는 다음 링크를 참조하십시오. http://codaffection.com/sql-server-article/delete-vs-truncate-in-sql-server/

여기에 이미지 설명을 입력하십시오

dotnet mob article : SQL Server에서 Vs Truncate 삭제


답변

SQL Server 또는 MySQL에서 자동 증분 기능이있는 PK가 있으면 truncate가 카운터를 재설정합니다.


답변

“잘라내 기는 아무 것도 기록하지 않습니다”가 정확합니다. 나는 더 나아갈 것이다.

트랜잭션 컨텍스트에서 잘림이 실행되지 않습니다.

삭제보다 잘라 내기의 속도 이점은 분명합니다. 이러한 이점은 상황에 따라 사소한 것부터 엄청난 것까지 다양합니다.

그러나 의도하지 않게 참조 무결성을 중단하고 다른 제약 조건을 위반하는 것을 보았습니다. 트랜잭션 외부에서 데이터를 수정하여 얻는 힘은 그물없이 줄타기를 걸을 때 상속하는 책임과 균형을 이루어야합니다.