티스토리 뷰
SQL을 다루다 보면 테이블의 데이터를 한꺼번에 삭제해야 하는 경우가 많다. 가장 대표적인 방법이 바로 DELETE와 TRUNCATE인데, 겉으로 보기에는 비슷하지만 작동 방식과 성능 면에서 큰 차이가 있다. 초보 개발자라면 어떤 상황에서 어느 것을 써야 하는지 헷갈릴 수밖에 없다. 이번 글에서는 DELETE와 TRUNCATE의 차이를 정확히 짚어보고, 언제 어떤 명령어를 사용하는 것이 좋은지 살펴보겠다.
1. DELETE: 데이터만 삭제, 구조는 유지
DELETE는 테이블에서 특정 조건에 맞는 데이터를 삭제하는 SQL 명령어다. 모든 데이터를 삭제하고 싶다면 다음과 같이 사용할 수 있다.
DELETE FROM almember;
이 명령어는 테이블의 모든 데이터를 지우지만, 테이블의 구조(컬럼, 제약 조건 등)는 그대로 유지된다. 또, 자동 증가(AUTO_INCREMENT) 값은 초기화되지 않는다. 즉, 이후 데이터를 다시 삽입하면 기존의 AUTO_INCREMENT 값 다음 번호부터 시작한다.
DELETE의 특징
- WHERE 절을 사용할 수 있어 특정 조건에 맞는 데이터만 삭제 가능
- 테이블의 구조 및 인덱스는 그대로 유지
- AUTO_INCREMENT 값은 초기화되지 않음
- 트랜잭션을 지원하여 ROLLBACK이 가능 (InnoDB에서만)
- 데이터 삭제 후에도 테이블 크기가 줄어들지 않음
DELETE 사용 예시
만약 특정 회원만 삭제하려면 WHERE 절을 사용하면 된다.
DELETE FROM almember WHERE id = 10;
2. TRUNCATE: 테이블을 통째로 비우는 강력한 명령어
TRUNCATE는 테이블의 모든 데이터를 한 번에 삭제하는 명령어다. DELETE와 달리 조건을 지정할 수 없고, 실행하면 테이블의 모든 행이 즉시 삭제된다.
TRUNCATE TABLE almember;
이 명령어를 실행하면 almember 테이블의 모든 데이터가 삭제되며, AUTO_INCREMENT 값도 초기화된다. 즉, 새로운 데이터를 삽입하면 다시 1부터 시작하게 된다.
TRUNCATE의 특징
- 테이블의 모든 데이터를 즉시 삭제
- WHERE 절을 사용할 수 없음
- AUTO_INCREMENT 값이 초기화됨
- 트랜잭션을 지원하지 않음 (ROLLBACK 불가능)
- 속도가 빠름 (DELETE보다 성능이 뛰어남)
- 테이블의 구조와 인덱스는 유지됨
TRUNCATE 사용 예시
테이블을 완전히 초기화하고 싶을 때 다음과 같이 실행하면 된다.
TRUNCATE TABLE almember;
3. DELETE vs TRUNCATE 비교
두 명령어의 차이를 한눈에 보기 쉽게 정리했다.
구분 DELETE TRUNCATE
삭제 대상 | 특정 조건의 행만 삭제 가능 | 테이블 전체 데이터 삭제 |
WHERE 절 사용 가능 여부 | 가능 | 불가능 |
AUTO_INCREMENT 초기화 여부 | 초기화되지 않음 | 초기화됨 |
트랜잭션 지원 | 가능 (InnoDB) | 불가능 |
속도 | 느림 (로그 저장됨) | 빠름 (로그 저장 안 됨) |
ROLLBACK 가능 여부 | 가능 (InnoDB) | 불가능 |
4. DELETE와 TRUNCATE 중 어떤 걸 써야 할까?
두 명령어를 적절하게 활용하려면 아래 기준을 참고하면 된다.
- 일부 데이터만 삭제해야 한다면?
→ DELETE 사용 (WHERE 조건을 활용 가능) - 테이블을 완전히 초기화해야 한다면?
→ TRUNCATE 사용 (속도가 빠르고 AUTO_INCREMENT 값도 초기화됨) - 트랜잭션을 지원하는 데이터 삭제가 필요한 경우?
→ DELETE 사용 (ROLLBACK 가능) - 테이블 크기가 커서 성능이 중요한 경우?
→ TRUNCATE 사용 (DELETE보다 빠름)
SQL에서 데이터를 삭제하는 것은 단순한 작업처럼 보일 수 있지만, 실제로는 성능과 데이터 무결성까지 고려해야 하는 중요한 작업이다. DELETE와 TRUNCATE의 차이를 확실히 이해하고, 프로젝트 상황에 맞게 적절한 명령어를 사용하자.
#SQL #DELETE #TRUNCATE #데이터삭제 #DB관리 #SQL쿼리 #MySQL #데이터베이스 #개발자팁 #SQL최적화
'IT tech Coding > mysql' 카테고리의 다른 글
PHP MySQL 검색 기능: 테이블 전체 컬럼에서 자동으로 검색하는 방법 (0) | 2025.02.16 |
---|---|
PHP에서 Prepared Statement로 검색 결과가 나오지 않을 때 확인해야 할 점들 (0) | 2025.01.20 |
테이블 PRIMARY KEY와 AUTO_INCREMENT: 데이터베이스 오류 해결하기 (0) | 2025.01.12 |
PHP와 MySQL로 JSON 변환 및 저장하기: 기존 테이블 데이터 재구성 (0) | 2024.12.25 |
MySQL 데이터 삽입: 효율적인 SQL 작성 기법 (0) | 2024.11.29 |
- Total
- Today
- Yesterday
- #파이썬패키징
- 파이썬코드줄바꿈방법
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- 캐드자동작도
- 구글드라이브API
- 스크립트작성기초
- 코딩효율성
- 오토핫키가이드
- 오블완
- #InstallForge
- 뫄프로그래밍
- json파일편하게보는법
- json파일형태보기
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- ajax오류메시지
- chatGPT3.5파이썬버전
- 테크에능한여성
- 티스토리챌린지
- 프로그래머생활
- General error: 2031
- 엑셀보호
- 도면자동생성
- Bootstrap 5
- 효율적코딩방법
- 코딩튜토리얼
- 엑셀셀보호
- isset을 적용해야 하는 이유
- sql문장 날짜계산
- #프로그램설치
- 엑셀입력보호
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |