추천, 2020

에디터의 선택

SQL에서 DELETE와 TRUNCATE의 차이점

DELETE 및 TRUNCATE는 관계에서 튜플을 제거하는 데 사용되는 명령이지만 많은 문맥에서 다릅니다. SQL에서 DELETE 명령은 데이터 조작 언어 명령이지만 TRUNCATE 명령은 데이터 정의 언어 명령입니다. 그러나 DELETE와 TRUNCATE를 구분할 수 있다는 점은 DELETE가 관계로부터 지정된 튜플을 제거 할 수 있다는 것입니다. 반면 TRUNCATE 명령은 관계로부터 전체 튜플을 제거합니다.

우리는 여기에서 멈추지 말아야한다. DELETE와 TRUNCATE 사이에 다른 많은 차이점이있다. 아래에 나와있는 비교 차트의 도움으로 토론하겠습니다.

비교 차트

비교 기준지우다TRUNCATE
기본삭제할 튜플을 지정할 수 있습니다.릴레이션에서 모든 튜플을 삭제합니다.
언어DELETE는 데이터 조작 언어 명령입니다.TRUNCATE는 데이터 정의 언어 명령입니다.
어디에DELETE 명령은 WHERE 절을 가질 수 있습니다.TRUNCATE 명령에 WHERE 절이 없습니다.
방아쇠DELETE 명령은 테이블에 적용된 트리거를 활성화하고 테이블을 트리거합니다.TRUNCATE 명령은 실행할 트리거를 활성화하지 않습니다.
삭제DELETE 명령은 튜플을 하나씩 제거합니다.TRUNCATE는 튜플을 포함하는 전체 데이터 페이지를 삭제합니다.
자물쇠DELETE 명령은 삭제하기 전에 행 / 튜플을 잠급니다.TRUNCATE 명령은 테이블 데이터를 삭제하기 전에 데이터 페이지를 잠급니다.
속도DELETE 명령은 TRUNCATE에 비해 느리게 동작합니다.TRUNCATE는 DELETE에 비해 빠릅니다.
트랜잭션DELETE는 삭제 된 각 튜플에 대한 트랜잭션 로그를 기록합니다.TRUNCATE는 삭제 된 각 데이터 페이지에 대한 트랜잭션 로그를 기록합니다.
복원DELETE 명령 뒤에는 COMMIT 또는 ROLLBACK이 올 수 있습니다.TRUNCATE 명령은 ROLLBACK 일 수 없습니다.

DELETE의 정의

DELETE 는 DML ( Data Manipulation Language ) 명령입니다. DELETE 명령의 타스크는 테이블이나 관계에서 터플을 h 제하거나 제거하는 것입니다. DELETE를 사용하여 관계의 모든 속성 값을 사용하여 전체 튜플을 제거 할 수 있습니다. DELETE는 관계로부터 튜플의 특정 속성 값을 제거하지 않습니다.

WHERE 절을 사용하여 테이블에서 삭제할 튜플을 필터링 할 수 있습니다. DELETE 문에 WHERE 절을 지정 하면 WHERE 절 조건을 만족하는 튜플 만 삭제됩니다. 그러나 DELETE 문에 WHERE 절을 지정하지 않으면 기본적으로 릴레이션에서 모든 튜플을 삭제하거나 제거합니다. DELETE 문의 WHERE 절은 중첩 된 SELECT-FROM-WHERE 문을 포함 할 수 있습니다.

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

DELETE FROM table_name WHERE [ 조건 ];

DELETE 명령은 한 번에 하나의 관계 또는 테이블에서만 작동합니다. 다른 릴레이션에서 튜플을 삭제하려면 각각 다른 DELETE 명령을 사용해야합니다. 그러나 한 관계에서 튜플을 삭제하면 데이터베이스의 참조 무결성손상 될 수 있으며 이는 트리거의 도움으로 해결할 수 있습니다. DELETE 명령이 참조 무결성을 위반하면 삭제 된 튜플을 참조하는 다른 릴레이션의 튜플에 대한 삭제 작업을 전파하는 모든 참조 트리거 (지정된 경우)가 활성화됩니다.

DELETE 명령은 먼저 삭제할 행 또는 튜플을 잠근 다음 튜플을 하나씩 삭제합니다. 따라서 더 많은 잠금과 리소스가 필요하므로 느려집니다 . COMMIT을 사용하여 DELETE 문에 의해 수행 된 변경 사항을 영구적으로 만들거나 ROLLBACK을 사용하여 데이터베이스를 재설정 할 수 있습니다.

TRUNCATE의 정의

TRUNCATE 는 관계로부터 튜플을 삭제하기 때문에 DELETE 명령과 유사합니다. 차이점은 릴레이션에서 전체 튜플을 삭제한다는 것입니다. TRUNCATE 명령이 실행되면 테이블의 전체 데이터가 삭제되고 각 튜플은 모든 속성 값과 함께 테이블에서 제거됩니다. 그러나 테이블의 구조는 여전히 데이터베이스에 존재합니다. 따라서 테이블에 튜플을 다시 입력 할 수 있습니다. TRUNCATE는 데이터 정의 언어 명령입니다.

TRUNCATE 명령의 구문은 다음과 같습니다.

TRUNCATE TABLE table_name ;

DELETE와 같이 TRUNCATE는 테이블 데이터에 대해 행 단위로 작동하지 않습니다. 대신 테이블 데이터를 저장하는 데이터 페이지 에서 작동합니다. 이제 TRUNCATE가 데이터 페이지를 삭제할 때 튜플 대신 데이터 페이지에 대한 잠금 을 획득해야합니다. 따라서 DELETE에 비해 TRUNCATE를 빠르게 만드는 잠금 및 자원이 덜 필요합니다.

TRUNCATE 명령을 실행해도 데이터가 행 단위로 작동하지 않으므로 트리거 가 활성화되지 않습니다. 테이블이 외래 키에 의해 참조되는 경우 TRUNCATE를 실행할 수 없습니다. TRUNCATE 명령이 테이블 데이터를 삭제하면 절대로 다시 복구 할 수 없습니다 .

SQL의 DELETE와 TRUNCATE의 주요 차이점

  1. DELETE와 TRUNCATE의 주된 차이점은 DELETE를 사용하면 관계에서 지정된 튜플을 삭제할 수 있다는 것입니다. 그러나 TRUNCATE를 사용하면 릴레이션에서 전체 튜플이 삭제됩니다.
  2. DELETE는 DML 명령이고, TRUNCATE는 DDL 명령입니다.
  3. DELETE는 WHERE 절을 사용하여 삭제할 레코드 / 튜플을 필터링합니다. 그러나 TRUNCATE는 모든 튜플을 삭제하므로 WHERE 절을 필요로하지 않으므로 튜플을 필터링 할 필요가 없습니다.
  4. DELETE는 테이블에 적용된 참조 트리거를 활성화합니다. 그러나 TRUNCATE는 테이블에서 트리거를 실행하지 않습니다.
  5. DELETE 명령은 테이블에서 하나씩 튜플을 제거하고 순서대로 처리합니다. 그러나 TRUNCATE는 하나씩 튜플에 대해 작동하지 않습니다. 대신 TRUNCATE는 테이블 데이터를 저장하는 데이터 페이지에서 작동합니다.
  6. DELETE는 삭제하기 전에 튜플에 대한 잠금을 획득하는 반면, TRUNCATE는 데이터 페이지를 삭제하기 전에 데이터 페이지에 대한 잠금을 획득합니다.
  7. TRUNCATE는 DELETE 명령에 비해 빠릅니다.
  8. DELETE는 각 튜플에 대한 트랜잭션 로그를 기록하는 반면, TRUNCATE는 각 데이터 페이지에 대한 트랜잭션 로그를 기록합니다.
  9. TRUNCATE를 사용하여 데이터를 삭제하면 다시 복구 할 수 없지만 DELETE 명령을 사용하여 삭제 한 데이터를 복구 할 수 있습니다.

결론:

테이블의 레코드 삭제를 사용자 정의하려면 DELETE 명령을 사용할 수 있습니다. 테이블을 비우려면 즉, 테이블에 데이터를 남기고 싶지 않으면 TRUNCATE 명령을 사용하십시오.

Top