우리는 여기에서 멈추지 말아야한다. 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의 주요 차이점
- DELETE와 TRUNCATE의 주된 차이점은 DELETE를 사용하면 관계에서 지정된 튜플을 삭제할 수 있다는 것입니다. 그러나 TRUNCATE를 사용하면 릴레이션에서 전체 튜플이 삭제됩니다.
- DELETE는 DML 명령이고, TRUNCATE는 DDL 명령입니다.
- DELETE는 WHERE 절을 사용하여 삭제할 레코드 / 튜플을 필터링합니다. 그러나 TRUNCATE는 모든 튜플을 삭제하므로 WHERE 절을 필요로하지 않으므로 튜플을 필터링 할 필요가 없습니다.
- DELETE는 테이블에 적용된 참조 트리거를 활성화합니다. 그러나 TRUNCATE는 테이블에서 트리거를 실행하지 않습니다.
- DELETE 명령은 테이블에서 하나씩 튜플을 제거하고 순서대로 처리합니다. 그러나 TRUNCATE는 하나씩 튜플에 대해 작동하지 않습니다. 대신 TRUNCATE는 테이블 데이터를 저장하는 데이터 페이지에서 작동합니다.
- DELETE는 삭제하기 전에 튜플에 대한 잠금을 획득하는 반면, TRUNCATE는 데이터 페이지를 삭제하기 전에 데이터 페이지에 대한 잠금을 획득합니다.
- TRUNCATE는 DELETE 명령에 비해 빠릅니다.
- DELETE는 각 튜플에 대한 트랜잭션 로그를 기록하는 반면, TRUNCATE는 각 데이터 페이지에 대한 트랜잭션 로그를 기록합니다.
- TRUNCATE를 사용하여 데이터를 삭제하면 다시 복구 할 수 없지만 DELETE 명령을 사용하여 삭제 한 데이터를 복구 할 수 있습니다.
결론:
테이블의 레코드 삭제를 사용자 정의하려면 DELETE 명령을 사용할 수 있습니다. 테이블을 비우려면 즉, 테이블에 데이터를 남기고 싶지 않으면 TRUNCATE 명령을 사용하십시오.