IT story

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

hot-time 2020. 4. 4. 10:59
반응형

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


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

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


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


일반 개요

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

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


명세서 유형

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


커밋 및 롤백

공급 업체에 따라 다름

SQL * 서버

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

PostgreSQL

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

신탁

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

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


우주 매립

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

신탁

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


행 범위

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

신탁

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


객체 유형

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


데이터 객체 아이덴티티

신탁

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


플래시백 (오라클)

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

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

Oracle에서 FLASHBACK 사용 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는 테이블에서 모든 행을 제거합니다. 작업을 롤백 할 수 없으며 트리거가 발생하지 않습니다. 따라서 TRUCATE는 더 빠르며 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가 카운터를 재설정합니다.


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

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

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

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


예, DELETE가 느리고 TRUNCATE가 빠릅니다. 왜?

DELETE는 레코드를 읽고, 제약 조건을 확인하고, 블록을 업데이트하고, 인덱스를 업데이트하고, 다시 실행 / 실행 취소를 생성해야합니다. 모든 시간이 걸립니다.

TRUNCATE는 단순히 테이블 (상위 워터 마크) 및 of에 대한 포인터를 데이터베이스에서 조정합니다! 데이터가 사라졌습니다.

이것은 Oracle 고유의 AFAIK입니다.


TRUNCATEDDL 문인 반면 DELETEDML 문입니다. 아래는 두 가지의 차이점입니다.

  1. 으로 TRUNCATEDDL입니다 ( 데이터 정의 언어 ) 문 그것은이 영구적으로 변경하기 위해 커밋이 필요하지 않습니다. 이것이 truncate에 의해 삭제 된 행을 롤백 할 수없는 이유입니다. 반면에 DELETEDML ( 데이터 조작 언어 ) 문은 그 효과를 영구적으로 만들기 위해 명시적인 커밋이 필요합니다.

  2. TRUNCATEDELETEwhere 절을 사용하는 경우 항상 테이블에서 모든 행을 제거하고 테이블을 비워두고 테이블 구조를 그대로 유지 하고 조건부로 제거 할 수 있습니다.

  3. TRUNCATE TABLE명령문으로 삭제 된 행을 복원 할 수 없으며 TRUNCATE명령문 에서 where 절을 지정할 수 없습니다 .

  4. TRUNCATE명령문은 on delete trigger on DELETEstatement 와 달리 트리거를 발생시키지 않습니다 .

주제와 관련된 매우 좋은 링크는 다음과 같습니다 .


실수로 Delete / Truncate를 사용하여 테이블에서 모든 데이터를 제거했습니다. 커밋 된 트랜잭션을 롤백 할 수 있습니다. 삭제 / 잘라내 기가 발생할 때까지 마지막 백업을 복원하고 트랜잭션 로그를 실행하십시오.

아래 관련 정보 는 블로그 게시물 에서 가져온 것입니다 .

데이터베이스에서 작업하는 동안 우리는 데이터베이스 간의 차이점을 모르고 삭제 및 자르기를 사용합니다. 이 기사에서는 Sql에서 Delete와 Truncate의 차이점에 대해 설명합니다.

지우다:

  • 삭제는 DML 명령입니다.
  • Delete 문은 행 잠금을 사용하여 실행되며 테이블의 각 행은 삭제를 위해 잠 깁니다.
  • where 절에 필터를 지정할 수 있습니다.
  • 조건이 존재하면 지정된 데이터를 삭제합니다.
  • 작업이 개별적으로 기록되므로 활동을 트리거로 삭제하십시오.
  • 로그를 유지하기 때문에 잘림보다 느림

자르기

  • 잘림은 DDL 명령입니다.
  • 테이블 자르기는 항상 테이블과 페이지를 잠그지 만 각 행은 잠그지 않습니다. 모든 데이터를 제거합니다.
  • Where 조건을 사용할 수 없습니다.
  • 모든 데이터를 제거합니다.
  • 작업이 개별 행 삭제를 기록하지 않기 때문에 테이블 잘라내 기가 트리거를 활성화 할 수 없습니다.
  • 로그를 보관하지 않기 때문에 성능면에서 더 빠릅니다.

참고 : 트랜잭션과 함께 사용하면 삭제 및 잘라내기를 모두 롤백 할 수 있습니다. 트랜잭션이 완료되고 커밋 된 경우 잘라 내기 명령을 롤백 할 수 없지만 로그 파일에서 삭제 명령이 로그 파일에 기록되므로 나중에 로그 파일에서 롤백해야 할 경우 로그 파일에서 삭제 명령을 롤백 할 수 있습니다.

자르려는 테이블을 참조하는 외래 키 제약 조건이 있으면 참조 테이블에 데이터가 없어도 작동하지 않습니다. 외래 키 검사는 DML이 아닌 DDL로 수행되기 때문입니다. 이 문제는 테이블에 대한 외래 키 제약 조건을 일시적으로 비활성화하여 해결할 수 있습니다.

테이블 삭제는 기록 된 작업입니다. 따라서 각 행의 삭제는 트랜잭션 로그에 기록되므로 속도가 느려집니다. 테이블 잘라내 기는 또한 테이블의 모든 행을 삭제하지만 각 행의 삭제를 기록하지 않고 대신 테이블의 데이터 페이지 할당 해제를 기록하므로 더 빠릅니다.

~ 실수로 Delete / Truncate를 사용하여 테이블에서 모든 데이터를 제거했습니다. 커밋 된 트랜잭션을 롤백 할 수 있습니다. 삭제 / 잘라내 기가 발생할 때까지 마지막 백업을 복원하고 트랜잭션 로그를 실행하십시오.


SQL Server 2005에서는 자르기를 롤백 있다고 생각합니다.


지우다

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

절단

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

하락

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


DROP 및 TRUNCATE는 DDL 명령 인 반면 DELETE는 DML 명령입니다. 따라서 DELETE 조작을 롤백 (실행 취소) 할 수 있지만 DROP 및 TRUNCATE 조작을 롤백 할 수 없습니다.

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


트랜잭션에 랩핑 된 경우 TRUNCATE를 롤백 할 수 있습니다.

아래의 두 참조를 참조하여 직접 테스트하십시오.

http://blog.sqlauthority.com/2007/12/26/sql-server-truncate-cant-be-rolled-back-using-log-files-after-transaction-session-is-closed/

http://sqlblog.com/blogs/kalen_delaney/archive/2010/10/12/tsql-tuesday-11-rolling-back-truncate-table.aspx

TRUNCATE vs. DELETE는 SQL 인터뷰에서 악명 높은 질문 중 하나입니다. 면담 자에게 올바르게 설명해야합니다. 그렇지 않으면 비용이 발생할 수 있습니다. 문제는 많은 사람들이 잘 알지 못하기 때문에 예라고 자르면 롤백 할 수 있다고 대답하면 대답을 잘못 생각할 것입니다.


원래 답변에 대한 작은 수정-삭제는 상당한 양의 리두를 생성합니다 (실행 취소 자체가 리두에 의해 보호됨). 이것은 자동 추적 출력에서 ​​볼 수 있습니다.

SQL> delete from t1;

10918 rows deleted.

Elapsed: 00:00:00.58

Execution Plan
----------------------------------------------------------
   0      DELETE STATEMENT Optimizer=FIRST_ROWS (Cost=43 Card=1)
   1    0   DELETE OF 'T1'
   2    1     TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=43 Card=1)




Statistics
----------------------------------------------------------
         30  recursive calls
      12118  db block gets
        213  consistent gets
        142  physical reads
    3975328  redo size
        441  bytes sent via SQL*Net to client
        537  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
      10918  rows processed

다음은 SQL Server에서 DELETE와 TRUNCATE의 차이점 에 대한 자세한 답변입니다 .

데이터 제거 : 먼저, 둘 다 테이블에서 행을 제거하는 데 사용할 수 있습니다.
그러나 DELETE를 사용하면 테이블뿐만 아니라 VIEW 또는 공급자 기능에 따라 OPENROWSET 또는 OPENQUERY의 결과에서 행을 제거 할 수 있습니다.

FROM Clause : DELETE를 사용하면 다른 FROM 절을 사용하여 다른 테이블의 행을 기준으로 한 테이블 / view / rowset_function_limited에서 행을 삭제할 수도 있습니다. 해당 FROM 절에서 일반 JOIN 조건을 작성할 수도 있습니다. 실제로 SELECT를 DELETE로 바꾸고 열 이름을 제거하여 집계 함수를 포함하지 않는 SELECT 문에서 DELETE 문을 작성할 수 있습니다.
TRUNCATE를 사용하면 그렇게 할 수 없습니다.

WHERE : TRUNCATE는 WHERE 조건을 가질 수 없지만 DELETE는 가능합니다. 즉, TRUNCATE를 사용하면 특정 행 또는 특정 행 그룹을 삭제할 수 없습니다. TRUNCATE TABLE은 WHERE 절이없는 DELETE 문과 유사합니다.

성능 : TRUNCATE TABLE이 더 빠르고 시스템 및 트랜잭션 로그 리소스를 더 적게 사용합니다. 그리고 그 이유 중 하나는 두 명령문이 사용하는 잠금입니다. DELETE 문은 행 잠금을 사용하여 실행되며 테이블의 각 행은 삭제를 위해 잠 깁니다. TRUNCATE TABLE은 항상 테이블과 페이지를 잠그지 만 각 행은 잠그지 않습니다.

트랜잭션 로그 : DELETE 문은 한 번에 하나씩 행을 제거하고 각 행에 대해 트랜잭션 로그에 개별 항목을 만듭니다.
TRUNCATE TABLE은 테이블 데이터를 저장하는 데 사용 된 데이터 페이지를 할당 해제하여 데이터를 제거하고 트랜잭션 로그에 페이지 할당 해제 만 기록합니다.

페이지 : DELETE 문이 실행 된 후에도 테이블에 빈 페이지가 포함될 수 있습니다. TRUNCATE는 테이블 데이터를 저장하는 데 사용 된 데이터 페이지를 할당 해제하여 데이터를 제거합니다.

트리거 : TRUNCATE는 테이블에서 삭제 트리거를 활성화하지 않습니다. 따라서 TRUNCATE를 사용하는 동안 매우주의해야합니다. 행이 삭제 될 때 일부 자동 정리 또는 로깅 조치를 수행하기 위해 테이블에 삭제 트리거가 정의되어 있으면 TRUNCATE를 사용하지 않아야합니다.

ID 열 : 테이블에 ID 열이 포함 된 경우 TRUNCATE를 사용하면 해당 열의 카운터가 열에 대해 정의 된 시드 값으로 재설정됩니다. 시드가 정의되지 않은 경우 기본값 1이 사용됩니다. DELETE는 ID 카운터를 재설정하지 않습니다. 따라서 ID 카운터를 유지하려면 대신 DELETE를 사용하십시오.

복제 : 트랜잭션 복제 또는 병합 복제에 사용 된 테이블에 대해 DELETE를 사용할 수 있습니다.
트랜잭션 복제 또는 병합 복제와 관련된 테이블에는 TRUNCATE를 사용할 수 없습니다.

롤백 : DELETE 문을 롤백 할 수 있습니다.
트랜잭션이 TRANSACTION 블록으로 묶여 있고 세션이 닫히지 않은 경우 TRUNCATE를 롤백 할 수도 있습니다. 세션이 종료되면 TRUNCATE를 롤백 할 수 없습니다.

제한 사항 : DELETE 문이 트리거를 위반하거나 FOREIGN KEY 제약 조건이있는 다른 테이블의 데이터에서 참조하는 행을 제거하려고하면 실패 할 수 있습니다. DELETE가 여러 행을 제거하고 제거 된 행 중 하나가 트리거 또는 제한 조건을 위반하면 명령문이 취소되고 오류가 리턴되며 행이 제거되지 않습니다.
그리고 DELETE가 View에 대해 사용되는 경우 해당 View는 업데이트 가능한보기 여야합니다. 인덱싱 된 뷰에서 사용 된 테이블에 대해서는 TRUNCATE를 사용할 수 없습니다.
자체를 참조하는 외래 키가있는 테이블이 아닌 한 FOREIGN KEY 제약 조건에서 참조하는 테이블에 대해서는 TRUNCATE를 사용할 수 없습니다.


가장 큰 차이점은 자르기는 삭제가 아닌 로그되지 않은 작업이라는 것입니다.

데이터베이스 충돌이 발생하는 경우 잘림으로 운영되는 데이터는 복구 할 수 없지만 삭제하면 복구 할 수 있습니다.

자세한 내용은 여기


DELETE 문 :이 명령은 where 절에 제공된 조건에 따라 테이블에서 행만 삭제하거나 조건이 지정되지 않은 경우 테이블에서 모든 행을 삭제합니다. 그러나 테이블을 포함하는 공간을 비우지 않습니다.

SQL DELETE 문의 구문은 다음과 같습니다.

table_name에서 삭제 [WHERE 조건];

TRUNCATE 문 :이 명령은 테이블에서 모든 행을 삭제하고 테이블이 포함 된 공간을 비우는 데 사용됩니다.


지우다

DELETE is a DML command
DELETE you can rollback
Delete = Only Delete- so it can be rolled back
In DELETE you can write conditions using WHERE clause
Syntax – Delete from [Table] where [Condition]

절단

TRUNCATE is a DDL command
You can't rollback in TRUNCATE, TRUNCATE removes the record permanently
Truncate = Delete+Commit -so we can't roll back
You can't use conditions(WHERE clause) in TRUNCATE
Syntax – Truncate table [Table]

자세한 내용은 방문

http://www.zilckh.com/what-is-the-difference-between-truncate-and-delete/


두 작업의 또 다른 차이점은 테이블에 ID 열이 포함 된 경우 해당 열의 카운터가 TRUNCATE 아래에서 1 (또는 열에 대해 정의 된 시드 값)으로 재설정된다는 것입니다. DELETE는이 영향을 미치지 않습니다.


즉, 잘라내 기는 아무것도 기록하지 않으므로 (더 빠르지 만 취소 할 수 없음) 삭제는 기록됩니다 (더 큰 트랜잭션의 일부일 수 있으며 롤백되는 등). dev의 테이블에 원하지 않는 데이터가있는 경우 일반적으로 트랜잭션 로그를 채울 위험이 없으므로 잘라내는 것이 좋습니다.


편리한 이유는 수백만 행 테이블에서 데이터를 새로 고쳐야하지만 다시 작성하지 않으려는 경우입니다. "삭제 *"는 영원히 걸리지 만, 잘라 내기의 성능 영향은 무시할 수 있습니다.


dblink를 통해 DDL을 수행 할 수 없습니다.


matthieu의 게시물에 댓글을 달았지만 아직 담당자가 없습니다 ...

MySQL에서 자동 증분 카운터는 자르기로 재설정되지만 삭제로는 재설정되지 않습니다.


잘라내 기가 SQL Server에 아무것도 기록하지는 않습니다. truncate는 정보를 기록하지 않지만 TRUNCATE를 시작한 테이블에 대한 데이터 할당 해제 페이지를 기록합니다.

트랜잭션을 시작할 때 정의하면 잘린 레코드가 롤백 될 수 있으며 롤백 한 후에 잘린 레코드를 복구 할 수 있습니다. 그러나 커밋 된 잘린 트랜잭션 후 트랜잭션 로그 백업에서 잘린 레코드를 복구 할 수 없습니다.


절단부는 여기에서 롤백 할 수도 있습니다.

begin Tran
delete from  Employee

select * from Employee
Rollback
select * from Employee

SQL에서 자르기 및 삭제는 테이블에서 데이터를 제거하거나 삭제하는 데 사용되는 두 가지 명령입니다. 본질적으로 매우 기본이지만 두 SQL 명령은 사용하기 전에 세부 사항에 익숙해 질 때까지 많은 문제를 일으킬 수 있습니다. 명령을 잘못 선택하면 처리 속도가 매우 느려지거나 너무 많은 데이터를 제거해야하고 로그 세그먼트가 충분하지 않은 경우 로그 세그먼트가 손상 될 수 있습니다. 그렇기 때문에 SQL에서 truncate and delete 명령을 언제 사용해야하는지 아는 것이 중요하지만이를 사용하기 전에 Truncate와 Delete의 차이점을 알고 있어야하며이를 기반으로 DELETE가 제거를위한 더 나은 옵션인지 확인할 수 있습니다. 데이터 또는 TRUNCATE를 사용하여 테이블을 제거해야합니다.

확인 참조 여기를 클릭


TRUNCATE TABLE 문을 실행하면 로깅 또는 트랜잭션 처리없이 테이블 내의 모든 레코드를 삭제하도록 SQL Server에 지시합니다.


DELETE 문은 특정 레코드를 삭제하기 위해 WHERE 절을 가질 수 있지만 TRUNCATE 문은 필요하지 않으며 전체 테이블을 정리합니다. 중요한 것은 DELETE 문이 삭제 된 날짜를 기록하지만 TRUNCATE 문은 기록하지 않습니다.


Microsoft SQL Server의 또 다른 차이점은 statement를 delete사용 output하여 삭제 된 레코드를 추적 할 수 있다는 것입니다 . 예 :

delete from [SomeTable]
output deleted.Id, deleted.Name

으로이 작업을 수행 할 수 없습니다 truncate.


자르기 명령에 사용되는 재 초기화 테이블, 그것은 table.Whereas의 모든 행 삭제하려면 DDL 명령이다 DELETE는 조건이 지정되지 않은 경우, 어떤 조건에 따라 삭제 된 행의 세트에 사용되는 DML 명령이고 그런 다음이 명령은 테이블에서 모든 행을 삭제합니다.

참고 URL : https://stackoverflow.com/questions/139630/whats-the-difference-between-truncate-and-delete-in-sql

반응형