728x90

1. DELETE

DML의 일종(Data Manipulation Language)

DELETE는 TABLE의 RECORDS만 지울 뿐, TABLE을 지우진 않는다.

Ex) DELETE FROM table_nm WHERE col=val;

one, some, all records를 삭제할 때 사용

return은 삭제된 row개수

삭제된 row는 모두 lock이 걸려서 rollback이 가능하다. 즉 트랜잭션 로그를 기록하기에 많은 데이터 삭제시 오래 걸릴 수 있다.

auto-increment를 keeping한다. 즉, ID 20(=last)을 지우고 새 row를 추가하면 ID 20이 아니라 21로 들어감

따라서, Table의 정의를 유지하면서도 rows(records)을 지우는 데에 사용

 

2. TRUNCATE

DDL의 일종(Data Definition Language)

TRUNCATE는 TABLE의 RECORDS를 모두 지움

roll back이 안되는 패키지가 존재 (SQL Server, PostgreSQL은 가능, MySQL이랑 Oracle은 불가)

DELETE보다 빠름(매 row를 scan하지 않기 때문)

DELETE보다 less transaction space를 사용, whole table을 lock하기 때문

auto-increment가 reset됨(패키지마다 옵션이 좀 다름)

 

3. DROP

DDL의 일종

DROP은 TABLE 자체를 지움(with all records)

roll back 지원(MySQL은 안됨)

 

정리하면,

테이블 전체 내용 삭제하며 테이블 구조가 필요없다면 DROP

테이블 전체 내용 삭제하며 테이블 구조가 필요하다면 TRUNCATE

트랜잭션 로그를 남겨야하는 삭제라면 DELETE

 

 

 

 

 

 

 

참고자료:

learnsql.com/blog/difference-between-truncate-delete-and-drop-table-in-sql/

 

TRUNCATE TABLE vs. DELETE vs. DROP TABLE: Removing Tables and Data in SQL

What’s the difference between DROP TABLE, TRUNCATE TABLE, and DELETE in SQL? We’ll look at the syntax of each operation and discuss their usage, details, and differences.

learnsql.com

 

728x90

+ Recent posts