TRUNCATE
테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납
- DDL(데이터 정의 언어)
- 해당 테이블의 데이터, 인덱스가 모두 삭제되지만 테이블 자체가 지워지는 것은 아님
- 최초 테이블이 만들어진 상태. 데이터가 1건도 없는 상태로 용량도 줄고 인덱스도 모두 삭제됨. 컬럼값만 남아있음
- 트랜잭션 로그에 한 번만 기록되므로 DELETE보다 성능 면에서 더 빠름
- 인덱싱 된 VIEW 와 함께 사용 불가능
- 테이블에서 이 명령어를 사용하려면 테이블에 대한 ALTER권한이 필요
- TRUNCATE는 테이블 잠금을 사용하여 실행되지만, 각 행은 잠기지 않습니다.
- 잠금(Lock) : 삽입, 삭제, 갱신 등의 트랜잭션이 수행되는 동안 특정 테이블 또는 행에 대해 CRUD작업을 할 수 없음.
- 자동 COMMIT이 되어 ROLLBACK 불가능
TRUNCATE TABLE tablename;
DROP
테이블 자체를 삭제하는 명령어
- DDL(데이터 정의 언어)
- 테이블 자체가 모두 지워지며 해당 테이블에 생성되어 있던 인덱스도 삭제됨
- 오라클 10g부터는 테이블이 삭제되는 것이 아니라 윈도우의 휴지통 개념처럼 잠시 삭제됨 그리고 테이블 이름이 BIN$..로 변경됨
- 자동 COMMIT이 되어 ROLLBACK 불가능
DROP TABLE tablename;
DELETE
데이터만 지워지고 디스크 상의 공간은 그대로
- DML(데이터 조작 언어)
- 원하는 데이터만 골라서 삭제 가능
- COMMIT 전이라면 ROLLBACK 가능
- 삭제된 각 행에 대해 트랜잭션 로그 기록 → TRUCNCATE보다 느림
- TRUNCATE보다 더 많은 트랜잭션 공간 사용
- 행 잠금 사용하여 실행
- 테이블 용량은 감소하지 않음
DELETE FROM tablename WHERE 조건;
출처 :
'공부 > DATABASE' 카테고리의 다른 글
프로그래머스 SQL 문제 다 풀었다 히히 (0) | 2023.04.19 |
---|---|
SQL SELECT쿼리 실행 순서 (0) | 2023.04.18 |
[프로그래머스]대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기(MySQL 풀이) (0) | 2023.04.12 |
[MySQL]논리 관련 함수, NULL처리 정리(IFNULL,IF,NULLIF,COALESCE,CASE문) (0) | 2023.04.03 |
[MySQL] JOIN 총 정리 (0) | 2023.03.07 |
댓글