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/
'CS' 카테고리의 다른 글
[Python]Define functions(positional argument, keyword argument, *args, **kwargs, /, *) (0) | 2020.10.08 |
---|---|
(진행중)[Elasticsearch]기본 사용법 모음 (0) | 2020.10.07 |
[Ubuntu]파일 찾기 자주 쓰는 명령어만 (0) | 2020.10.07 |
[python]Python 3.9로 upgrade하기 (0) | 2020.10.06 |
[SQL]Foreign key check란 (0) | 2020.10.06 |