DELETE, TRUNCATE 테이블 데이터 삭제 차이
- Database
- 2022. 12. 31.
테이블에 있는 데이터를 삭제하는 SQL 명령어로 DELETE와 TRUNCATE이 있습니다. 둘은 다릅니다. 차이점을 정리해보겠습니다.
DELETE
delete는 레코드를 테이블에서 삭제할 때 사용하는 DML(데이터 조작어)입니다. 테이블 내 행 전체를 제거합니다. WHERE 절을 사용해 조건을 걸어서 삭제 대상을 필터링할 수 있습니다. delete 명령어 수행 전 데이터를 백업하면 추후 원할 때 복원할 수 있습니다.
DELETE FROM 테이블명 WHERE 조건;
TRUNCATE
truncate은 테이블 전체 데이터를 제거하는 DDL(데이터 정의어)입니다. where 절을 사용할 수가 없어서 삭제 대상을 필터링 할 수 없습니다. 테이블의 모든 데이터를 날려버립니다. 이 작업은 로그를 남기지 않기 때문에 데이터를 복원할 수 없습니다. truncate은 테이블이 외래 키를 참조하고 있으면 사용할 수 없습니다.
TRUNCATE TABLE 테이블명;
차이점 정리
DELETE | TRUNCATE |
조건에 따라 테이블에서 단일 또는 복수의 레코드를 제거합니다. | 테이블 전체 데이터를 제거합니다. 테이블 자체를 제거하는 것은 아닙니다. 테이블의 스키마도 유지합니다. |
DML(데이터 조작 언어) 명령입니다. | DDL(데이터 정의 언어) 명령입니다. |
WHERE 절을 사용하여 테이블의 특정 행이나 데이터를 필터링할 수 있습니다. | WHERE 절을 사용하여 테이블에서 레코드를 필터링하지 않습니다. |
레코드를 하나씩 제거합니다. | 레코드가 포함된 전체 데이터 페이지를 삭제합니다. |
삭제하기 전에 행을 잠급니다. | 삭제하기 전에 데이터 페이지를 잠급니다. |
데이터만 삭제하기 때문에 테이블 ID를 재설정하지 않습니다. | 테이블 ID를 재설정합니다. |
삭제된 레코드에 대한 트랜잭션 로그를 유지합니다. 때문에 실행 속도가 느립니다. | 삭제된 데이터 페이지에 대한 트랜잭션 로그를 유지하지 않습니다. 때문에 실행 속도가 빠릅니다. |
COMMIT 또는 ROLLBACK 문을 사용하여 삭제된 데이터를 복원할 수 있습니다. | 명령이 한 번 실행되면 데이터를 복원할 수 없습니다. |
인덱싱된 뷰와 함께 사용할 수 있습니다. | 인덱싱된 뷰와 함께 사용할 수 없습니다. |
반응형
'Database' 카테고리의 다른 글
몽고DB mongod.cfg 설정 옵션들 의미 (0) | 2023.03.21 |
---|---|
MYSQL DB 서버 이관하는 방법 (리눅스) (0) | 2023.03.12 |
HeidiSQL 세션 연결하는 방법 (0) | 2022.12.19 |
MariaDB 오프라인 설치 방법 (yum 없이 tar.gz 사용) (1) | 2022.12.10 |
MYSQL 테이블 Collation 확인, 변경 방법 (Character Set과의 차이) (0) | 2022.11.28 |