programing

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

bestprogram 2023. 4. 12. 23:07

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

차이가 있나요?TRUNCATE ★★★★★★★★★★★★★★★★★」DELETESQL sql sql sql?

플랫폼 고유의 답변인 경우는, 그것을 기입해 주세요.

여기 차이점 목록이 있습니다.Oracle 고유의 기능을 강조 표시했습니다.커뮤니티에서도 다른 벤더의 고유한 차이점을 추가할 수 있으면 좋겠습니다.대부분의 벤더가 공통적으로 가지고 있는 차이는 표제 바로 아래에 기재되어 있으며, 그 차이는 다음과 같습니다.


개요

테이블에서 모든 행을 빠르게 삭제하고 테이블에 대한 외부 키가 없는 경우 TRUNCATE가 DELETE보다 빠를 수 있습니다.

다음과 같이 다양한 시스템 고유의 문제를 고려해야 합니다.


전표유형

Delete is DML, Truncate is DDL (DDLDML이란?)


커밋 및 롤백

벤더에 따라 다름

SQL*Server

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

포스트그레스Ql

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

오라클

TRUNCATE는 DDL이기 때문에 두 개의 커밋(문 실행 전과 실행 후)이 포함됩니다.따라서 잘라내기 작업은 롤백할 수 없으며 잘라내기 프로세스 실패 시 커밋이 발행됩니다.

단, 아래의 Flashback을 참조하십시오.


공간 회수

삭제해도 공간이 복구되지 않고 잘라내면 공간이 복구됩니다.

오라클

REUSE STORGE 절을 사용하면 데이터 세그먼트의 할당이 해제되지 않으므로 테이블을 데이터로 다시 로드하는 경우 데이터 세그먼트의 효율성이 약간 더 높아집니다.최고 수위가 재설정됩니다.


행 범위

삭제는 모든 행 또는 일부 행만 제거하는 데 사용할 수 있습니다.잘라내면 모든 행이 제거됩니다.

오라클

테이블을 분할할 때 개별 파티션을 분리하여 잘라낼 수 있으므로 모든 테이블의 데이터를 부분적으로 제거할 수 있습니다.


오브젝트 타입

클러스터 내의 테이블 및 테이블에 대해 삭제를 적용할 수 있습니다.잘라내기 기능은 테이블 또는 전체 클러스터에만 적용됩니다.(Oracle에 따라 다를 수 있음


데이터 객체 ID

오라클

삭제는 데이터 오브젝트 ID에는 영향을 주지 않지만 작성 후 테이블에 대한 삽입이 없는 한 잘라내기에서는 새 데이터 오브젝트 ID가 할당됩니다.단, 롤백된 삽입이라도 잘라내기 시 새 데이터 오브젝트 ID가 할당됩니다.


플래시백(Oracle)

플래시백은 삭제 시에도 동작하지만 잘라내면 동작 전 상태로의 플래시백이 방지됩니다.

단, 11gR2부터는 FLASHBACK ARCHIVE 기능을 사용하여 Express Edition을 제외하고 이 기능을 사용할 수 있습니다.

Oracle에서의 FLASHBACK 사용 http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638


권한

변수

오라클

테이블 삭제는 다른 사용자 또는 역할에게 부여할 수 있지만 DROP ANY TABLE 허가를 사용하지 않고 잘라낼 수는 없습니다.


재실행/실행 취소

삭제하면 소량의 redo와 대량의 실행 취소가 생성됩니다.잘라내기에서는, 각각에 대해서 무시할 수 있을 정도의 양이 생성됩니다.


인덱스

오라클

잘라내기 작업을 수행하면 사용할 수 없는 인덱스를 다시 사용할 수 있게 됩니다.삭제는 하지 않습니다.


외부 키

활성화된 외부 키가 테이블을 참조하는 경우 잘라내기를 적용할 수 없습니다.삭제에 의한 처리는 외부 키의 설정에 따라 달라집니다.


테이블 잠금

오라클

잘라내려면 배타적인 테이블 잠금이 필요하며, 삭제하려면 공유 테이블 잠금이 필요합니다.따라서 테이블 잠금을 비활성화하는 것은 테이블에서 잘라내기 작업을 방지하는 방법입니다.


트리거

DML 트리거는 잘라내기에서는 실행되지 않습니다.

오라클

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


리모트 실행

오라클

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


아이덴티티 컬럼

SQL*Server

잘라내면 ID 열 유형의 시퀀스가 리셋되지만 삭제는 리셋되지 않습니다.


결과 세트

실장에서는, 「」는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 작업을 수행한 후 변경을 영속적으로 하거나 원래대로 되돌리려면 트랜잭션을 COMMIT 또는 ROLLBLE해야 합니다.이 작업을 수행하면 테이블 상의 모든 DELETE 트리거가 발생한다는 점에 유의하십시오.삭제 시 행 레벨 잠금이 추가됩니다.

송신원: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

모두 좋은 답변입니다. 여기에 덧붙여야 합니다.

★★TRUNCATE TABLE는 DDL(Data Defination Language) 명령어로 DML(Data Manipulation Langauge) 명령어가 아닙니다.Delete Triggers뛰지 마세요.

Vs
문서 전문에 대해서는, 다음의 링크를 참조해 주세요.http://codaffection.com/sql-server-article/delete-vs-truncate-in-sql-server/

여기에 이미지 설명 입력

dotnet mob 기사 "Delete Vs Truncate in SQL Server"에서 인용

SQL Server 또는 MySQL에서 PK가 자동으로 증가하는 경우 잘라내면 카운터가 리셋됩니다.

"Truncate does not loging anything"이 맞습니다.더 나아가고 싶다.

트랜잭션 컨텍스트에서는 잘라내기가 실행되지 않습니다.

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

단, 의도하지 않게 참조 무결성이 깨지고 다른 제약조건이 위반되는 것을 본 적이 있습니다.트랜잭션 외부에서 데이터를 수정함으로써 얻을 수 있는 힘은 네트 없이 줄타기를 할 때 상속되는 책임과 균형을 이루어야 합니다.

TRUNCATE입니다만, 「DDL」은 「DDL」입니다.DELETE스테이트먼트입니다.은 두입니다.

  1. ~로TRUNCATE는 DDL(Data Definition Language) 스테이트먼트이며 변경을 영속화하기 위해 커밋할 필요는 없습니다.이것이 잘라서 삭제된 행을 롤백할 수 없는 이유입니다.반면에DELETE는 Data Manipulation Language(DML; 데이터 조작 언어)의 스테이트먼트이기 때문에, 그 효과를 영속화하기 위해서는 명시적인 커밋이 필요합니다.

  2. TRUNCATE 테이블에서는 그대로 유지됩니다.반면, 「테이블은 비어 있습니다.」라고 하는 것은, 「테이블 구조」라고 하는 것입니다.DELETE여기서 where where where where where where where where where where where where where where where where where where

  3. 한 행 TRUNCATE TABLE할 수 또, 「어디」의 「할 수 .또한 where 구를 지정할 수 없습니다.TRUNCATE★★★★★★ 。

  4. TRUNCATE는 "Delete on"이 " Trigger"를 .DELETE의 표시

여기 토픽과 관련된 매우 좋은 링크가 있습니다.

예, DELETE는 더 느리고 TRUNCATE는 더 빠릅니다. 왜요?

DELETE는 레코드를 읽고 제약조건을 확인하고 블록을 업데이트하며 인덱스를 업데이트하고 redo/undo를 생성해야 합니다.이 모든 것은 시간이 걸린다.

TRUNCATE는 데이터베이스의 포인터를 테이블(상위수점)과 펑!에 맞게 조정하기만 하면 됩니다.데이터가 사라졌습니다.

Oracle 고유의 AFAIK입니다.

실수로 삭제/삭제를 사용하여 테이블에서 모든 데이터를 삭제한 경우.커밋된 트랜잭션을 롤백할 수 있습니다.마지막 백업을 복원하고 삭제/삭제가 수행될 때까지 트랜잭션 로그를 실행하십시오.

다음 관련 정보는 블로그 투고에서 얻은 것입니다.

데이터베이스 작업 중 Delete와 Truncute를 사용하여 차이점을 파악하지 못하고 있습니다.이 기사에서는 SQL에서 삭제와 잘라내기 간의 차이점에 대해 설명합니다.

삭제:

  • Delete는 DML 명령어입니다.
  • delete 문은 행 잠금을 사용하여 실행됩니다. 테이블의 각 행은 삭제하기 위해 잠깁니다.
  • where 절에는 필터를 지정할 수 있습니다.
  • 조건이 존재하는 경우 지정된 데이터를 삭제합니다.
  • 작업이 개별적으로 기록되므로 트리거가 되는 액티비티를 삭제합니다.
  • 로그를 보관하기 때문에 잘라내기보다 느림

잘라내다

  • truncate는 DDL 명령어입니다.
  • 잘라내기 테이블은 항상 테이블과 페이지를 잠그지만 각 행은 잠그지 않습니다.데이터가 모두 삭제되기 때문에.
  • Where 조건을 사용할 수 없습니다.
  • 모든 데이터를 제거합니다.
  • 잘라내기 테이블은 개별 행 삭제를 기록하지 않으므로 트리거를 활성화할 수 없습니다.
  • 로그가 저장되지 않기 때문에 퍼포먼스가 향상됩니다.

주의: 삭제 및 잘라내기는 트랜잭션과 함께 사용하면 롤백할 수 있습니다.트랜잭션이 실행되면 커밋된 경우 Truncate 명령어는 롤백할 수 없지만 로그 파일에서 삭제 명령을 롤백할 수 있습니다.이는 나중에 로그 파일에서 롤백해야 할 경우에 대비하여 로그 파일에 삭제 쓰기가 기록되기 때문입니다.

잘라내려는 테이블을 참조하는 외부 키 제약 조건이 있는 경우, 참조 테이블에 데이터가 없는 경우에도 작동하지 않습니다.이는 외부 키 체크가 DML이 아닌 DDL을 사용하여 이루어지기 때문입니다.이는 테이블에 대한 외부 키 제약을 일시적으로 비활성화함으로써 회피할 수 있습니다.

테이블 삭제는 로깅된 작업입니다.따라서 각 행의 삭제가 트랜잭션 로그에 기록되므로 처리가 느려집니다.또한 테이블 잘라내기에서는 테이블 내의 모든 행이 삭제되지만 각 행의 삭제는 기록되지 않고 테이블의 데이터 페이지 할당 해제가 기록되므로 더 빨리 처리됩니다.

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

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

데이터 삭제 : 먼저 둘 다 테이블에서 행을 삭제할 수 있습니다.
DELETE는 VIEW의 OPENROWSET의 OPENQUERY의 DELETE입니다.

FROM 절 : DELETE를 사용하면 다른 테이블에서 행을 기준으로 한 테이블/뷰/rowset_function_limited에서 행을 삭제할 수도 있습니다.FROM 절에는 일반 JOIN 조건도 쓸 수 있습니다.실제로 SELECT를 DELETE로 대체하고 열 이름을 삭제하면 집약 함수를 포함하지 않는 SELECT 문에서 DELETE 문을 만들 수 있습니다.
TRUNCATE의 경우

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

퍼포먼스 : TRUNCATE TABLE은 고속으로 시스템 및 트랜잭션 로그 리소스를 적게 사용합니다.그리고 그 이유 중 하나는 어느 문장이든 사용하는 잠금 장치입니다.DELETE 문은 행 잠금을 사용하여 실행됩니다.테이블의 각 행은 삭제하기 위해 잠깁니다.TRUNCATE TABLE은 항상 테이블과 페이지를 잠그지만 각 행은 잠그지 않습니다.

Transaction log : DELETE 스테이트먼트는 한 번에 1개씩 행을 삭제하고 각 행에 대해 트랜잭션 로그에 개별 엔트리를 작성합니다.
TRUNCATE TABLE은 테이블 데이터 저장에 사용되는 데이터 페이지의 할당을 해제하여 데이터를 제거하고 페이지 할당 해제만 트랜잭션 로그에 기록합니다.

페이지 : DELETE 스테이트먼트를 실행한 후에도 테이블에는 빈 페이지가 포함될 수 있습니다.TRUNCATE는 테이블 데이터 저장에 사용되는 데이터 페이지의 할당을 해제하여 데이터를 삭제합니다.

트리거 : TRUNCATE는 테이블에서 삭제 트리거를 활성화하지 않습니다.따라서 TRUNCATE를 사용할 때는 매우 주의해야 합니다.테이블에서 delete Trigger가 정의된 경우 행 삭제 시 자동 정리 또는 로깅 액션을 수행할 수 없습니다.

Identity Column : 테이블에 Identity Column이 포함되어 있는 경우 TRUNCATE를 사용하면 해당 컬럼의 카운터가 컬럼에 정의된 시드 값으로 리셋됩니다.시드가 정의되지 않은 경우 기본값1 이 사용됩니다.DELETE는 ID 카운터를 리셋하지 않습니다.따라서 ID 카운터를 유지할 경우 DELETE를 대신 사용합니다.

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

롤백 : DELETE 스테이트먼트를 롤백 할 수 있습니다.
TRUNCATE TRANSACTION은 TRANCATE의 TRANSACTION입니다.TRUNCATE의 약자.

제약사항 : DELETE 스테이트먼트가 트리거를 위반하거나 FORENE KEY 제약으로 다른 테이블의 데이터에 의해 참조되는 행을 삭제하려고 하면 실패할 수 있습니다.DELETE에 의해 여러 행이 삭제되고 삭제된 행 중 하나가 트리거 또는 제약조건을 위반하면 문은 취소되고 오류가 반환되며 행은 삭제되지 않습니다.
「DELETE(삭제)」뷰의 「Updateable(업데이트 가능)」.TRUNCATE는 색인 보기에 사용된 테이블에 대해 사용할 수 없습니다.
TRUNCATE는 자신을 참조하는 외부 키가 있는 테이블이 아니면 FORNE KEY 제약 조건이 참조하는 테이블에 대해 사용할 수 없습니다.

SQL Server 2005에서는 잘라서 롤백할 수 있다고 생각합니다.

삭제

DELETE 명령어는 테이블에서 행을 삭제하는 데 사용됩니다.WHERE 절은 일부 행 삭제에만 사용할 수 있습니다.WHERE 조건을 지정하지 않으면 모든 행이 제거됩니다.DELETE 작업을 수행한 후 변경을 영속적으로 하거나 원래대로 되돌리려면 트랜잭션을 COMMIT 또는 ROLLBLE해야 합니다.이 작업을 수행하면 테이블 상의 모든 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 인터뷰 중 악명 높은 질문 중 하나입니다.면접관에게 제대로 설명하지 않으면 해고될지도 몰라요.문제는 YES Truncate를 롤백할 수 있다고 하면 많은 사람들이 답을 잘못 알고 있다고 생각할 가능성이 높다는 것입니다.

두 작업의 또 다른 차이점은 테이블에 ID 열이 포함되어 있는 경우 해당 열의 카운터가 TRUNCATE에서 1(또는 열에 대해 정의된 시드 값으로) 리셋된다는 것입니다.DELETE에는 영향이 없습니다.

원래 응답 - 삭제를 약간 수정해도 상당한 양의 redo가 발생합니다(실행 자체가 redo에 의해 보호되기 때문입니다).이것은, 자동 레이스 출력으로부터 확인할 수 있습니다.

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

삭제

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/

가장 큰 차이점은 잘라내기 작업이 로그되지 않은 작업인 반면 삭제 작업은 로그가 기록되지 않았다는 것입니다.

즉, 데이터베이스 크래시의 경우 잘라내기로 조작한 데이터를 복구할 수 없지만 삭제를 사용하면 복구할 수 있습니다.

자세한 내용은 이쪽

DELETE 스테이트먼트:이 명령어는 where 구에 지정된 조건에 따라 테이블에서 행만 삭제합니다.조건이 지정되지 않은 경우 테이블에서 모든 행을 삭제합니다.그러나 테이블이 들어 있는 공간은 확보되지 않습니다.

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

DELETE FROM table_name [WHERE 조건];

TRUNCATE 문:이 명령어는 테이블에서 모든 행을 삭제하고 테이블을 포함하는 공간을 해방하기 위해 사용합니다.

다음은 이들 sql 명령 간의 몇 가지 중요한 차이점을 정리한 것입니다.

sql truncate 명령어:

1) 이것은 DDL(데이터 정의 언어) 명령어이므로 COMMIT 및 ROLLBLL 등의 명령어는 이 명령어에는 적용되지 않습니다(여기에서는 Postgre가 예외입니다).SQL 및 MS SQL. TRUNCATE 명령어를 구현하면 트랜잭션에서 명령을 사용할 수 있습니다.)

2) 기록 삭제 작업은 자동으로 실행되며 되돌릴 수 없습니다(단, 위의 예외는 TRANSACTION 블록에 포함되어 세션이 닫히지 않은 경우).Oracle의 경우 - 문이 실행되기 전과 실행 후에 두 개의 암묵적인 커밋이 포함됩니다.따라서 런타임 오류로 인해 커밋이 발생하는 동안 명령을 취소할 수 없습니다.

3) 테이블에서 모든 레코드를 삭제합니다. 삭제에 한정할 수 없습니다.Oracle의 경우 테이블이 파티션별로 분할되면 개별 파티션을 분리하여 잘라낼 수 있으며(TRUNCATE) 테이블에서 모든 데이터를 부분적으로 삭제할 수 있습니다.

4) 테이블(TABlesPACE - 디스크)에서 데이터가 차지하는 공간을 확보합니다.Oracle의 경우 - REUSE STARGE 절을 사용하면 데이터 세그먼트가 롤백되지 않습니다. 즉, 테이블에 할당된 삭제된 행의 공간을 확보하게 되므로 테이블을 데이터로 새로고침할 경우 보다 효율적일 수 있습니다.최고 점수가 재설정됩니다.

5) TRUNCATE는 DELETE보다 훨씬 빠르게 기능

6) TRUNCATE의 경우 Oracle Flashback이 작동 전 상태로 돌아가는 것을 방지합니다.

7) Oracle - TRUNCATE는 DROP ANY 탭을 사용하지 않으면 부여(GRANT)할 수 없습니다.LE

8) TRUNCATE 조작에 의해 사용할 수 없는 인덱스를 다시 사용할 수 있게 됩니다.

9) 활성화된 외부 키가 다른 테이블을 참조하는 경우 TRUNCATE를 사용할 수 없습니다.이 경우 다음을 수행할 수 있습니다.

  • 명령어를 실행합니다.DROP RESTRACT, TRUNCATE, CREATE RESTRACT 또는 CREATE RESTRACT를 통해 재생합니다.
  • SET FORNE_KEY_CHECKS = 0, TRUNCATE, SET_FORNE_KEY_CHECKS = 1 명령을 실행합니다.

10) TRUNCATE는 전용 테이블 잠금이 필요하므로 전용 테이블 잠금을 해제하는 것은 테이블에서 TRUNCATE 작업을 방지하는 방법입니다.

11) TRUNCATE 실행 후 DML 트리거가 실행되지 않습니다(따라서 삭제 트리거가 테이블에 정의되어 있는 경우 TRUNCATE를 사용하여 자동 테이블 청소 또는 행 삭제 후 로그온 액션을 실행하지 마십시오).Oracle에서는 DDL 트리거가 실행됩니다.

12) Oracle - TRUNCATE는 다음 경우 사용할 수 없습니다.데이터베이스 링크 13) TRUNCATE는 삭제된 레코드 수를 반환하지 않습니다.

14) 트랜잭션 로그 - 페이지 할당 해제(테이블 데이터 저장에 사용한 데이터 페이지 할당 해제 및 페이지 할당 해제만 트랜잭션 로그에 기록)를 나타내는 하나의 로그 - DELETE보다 실행 속도가 빠릅니다.TRUNCATE는 데이터베이스 내의 포인터를 테이블로 조정하기만 하면 됩니다(High Water Mark).데이터는 즉시 삭제되므로 시스템리소스와 트랜잭션로그를 적게 사용합니다.

15) 퍼포먼스(취득한 잠금) - 테이블과 페이지 잠금 - 실행 중 퍼포먼스가 저하되지 않음

16) TRUNCATE는 트랜잭션 리플리케이션 또는 머지 리플리케이션과 관련된 테이블에서는 사용할 수 없습니다.

sql delete 명령어:

1) 이것은 DML(Data Manipulation Language) 명령어이므로 이 명령어에는 COMMIT 명령어와 Rollback 명령어가 사용됩니다.

2) Rollback 명령어를 사용하여 레코드 삭제 작업을 취소할 수 있습니다.

3) 테이블에서 레코드를 전부 또는 일부 삭제합니다. WHERE 절을 사용하여 삭제할 레코드를 제한할 수 있습니다.

4) 테이블(TABlesPACE - 디스크)에서 데이터가 차지하는 공간을 확보하지 않습니다.

5) DELETE는 TRUNCATE보다 훨씬 느리게 동작합니다.

6) Oracle Flashback은 DELETE에 대응

7) Oracle - DELETE의 경우 GRANT 명령을 사용할 수 있습니다.

8) DELETE 조작으로 사용할 수 없는 인덱스를 다시 사용할 수 없게 되는 일은 없습니다.

9) [DELETE]가 유효하게 되어 있는 외부 키가 다른 테이블을 참조하고 있는 경우, 외부 키 구성에 따라 적용 가능(또는 적용 불가)할 수 있는 경우(해당되지 않는 경우:

  • 명령어를 실행합니다.DROP RESTRACT, TRUNCATE, CREATE RESTRACT 또는 CREATE RESTRACT를 통해 재생합니다.
  • SET FORNE_KEY_CHECKS = 0, TRUNCATE, SET_FORNE_KEY_CHECKS = 1 명령을 실행합니다.

10) DELETE에는 공유 테이블 잠금이 필요합니다.

11) 발화

12) DELETE는 다음 데이터베이스 링크의 경우에 사용할 수 있습니다.

13) DELETE는 삭제된 레코드의 수를 반환합니다.

14) 트랜잭션 로그 - 삭제된 각 레코드(한 번에 행을 하나씩 삭제하고 삭제된 각 행에 대한 항목을 트랜잭션 로그에 기록) - TRUNCATE보다 실행 속도가 느립니다.DELETE 문을 실행한 후에도 테이블에는 공백 페이지가 계속 표시될 수 있습니다.DELETE는 레코드를 읽고, 제약조건을 확인하고, 블록을 업데이트하고, 인덱스를 업데이트하고, redo/undo를 생성해야 합니다.이 모든 것은 시간이 걸리기 때문에 TRUNCATE를 사용하는 경우보다 훨씬 오래 걸립니다.

15) 퍼포먼스(취득한 잠금) - 레코드 잠금 - 실행 중 퍼포먼스 저하 - 테이블 내의 각 레코드는 삭제하기 위해 잠김

16) 트랜잭션 리플리케이션 또는 머지 리플리케이션에서 사용되는 테이블에서 DELETE를 사용할 수 있습니다.

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

수백만 개의 행 테이블에서 데이터를 새로 고쳐야 하지만 재구축하고 싶지 않은 경우가 가장 편리합니다."Delete *"는 영원히 걸리지만, Truncate의 성능에 미치는 영향은 미미합니다.

dblink에서는 DDL을 할 수 없습니다.

매튜의 게시물에 댓글을 달고 싶지만, 아직 그 평판이...

MySQL에서는 자동 증분 카운터가 삭제는 사용하지 않고 잘라서 재설정됩니다.

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

truncated record는 처음에 트랜잭션을 정의하고 롤백 후 truncated record를 회복하면 롤백할 수 있습니다.그러나 잘린 트랜잭션을 커밋한 후에는 트랜잭션 로그 백업에서 잘린 레코드를 복구할 수 없습니다.

여기서 잘라내기는 롤백할 수도 있습니다.

begin Tran
delete from  Employee

select * from Employee
Rollback
select * from Employee

SQL에서 잘라내기 및 삭제는 테이블에서 데이터를 제거하거나 삭제하는 데 사용되는 두 가지 명령입니다.두 SQL 명령어는 본질적으로 매우 기본이지만 사용하기 전에 세부 정보를 숙지할 때까지 많은 문제를 일으킬 수 있습니다.잘못된 명령 선택은 프로세스가 매우 느리거나 삭제해야 하는 데이터가 너무 많고 로그 세그먼트가 충분하지 않은 경우 로그 세그먼트를 날려버릴 수 있습니다.따라서 SQL에서 truncute 및 delete 명령어를 사용하는 타이밍을 파악하는 것이 중요합니다.이러한 명령어를 사용하기 전에 "Truncate"와 "Delete"의 차이점을 인식하고 이를 바탕으로 DELETE를 사용하여 데이터를 삭제하거나 TRUNCATE를 사용하여 테이블을 삭제해야 하는 시기를 파악할 수 있습니다.

확인 참조 여기를 클릭

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

DELETE 스테이트먼트에는 특정 레코드를 삭제하는 WHERE 절을 포함할 수 있습니다.한편 TRUNCATE 스테이트먼트에는 WHERE 절이 필요 없으며 테이블 전체를 삭제합니다.중요한 것은 DELETE 문은 삭제된 날짜를 기록하지만 TRUNCATE 문은 기록하지 않는다는 것입니다.

의 또 다른 SQL Server와의 차이입니다.delete 하면 .output★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ §:

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

안 요.truncate.

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