MySQL TRUNCATE vs DELETE 차이점 정리

2025. 4. 25. 01:36·기술블로그

MySQL TRUNCATE vs DELETE 차이점 정리

프로젝트를 진행하면서 AUTO_INCREMENT 초기화 문제로 여러 번 혼란을 겪었습니다. 특히 테이블 데이터를 삭제할 때 TRUNCATE와 DELETE의 차이를 명확히 이해하는 것이 중요하다는 걸 깨달았습니다.

이 글에서는 오늘 발생한 이슈를 바탕으로 개념을 정리해보겠습니다.


🔹 1. TRUNCATE와 DELETE의 차이

구분 TRUNCATE DELETE

기본 기능 테이블의 모든 데이터 삭제 + 초기화 조건에 맞는 데이터 삭제
속도 빠름 (테이블 초기화 수준) 느림 (한 행씩 삭제)
AUTO_INCREMENT 초기화됨 (1부터 시작) 증가값 유지
롤백 불가 (일부 DB만 지원) 트랜잭션 사용 시 가능
제약조건 Foreign Key 있을 경우 제한 제약조건 준수

🔹 2. 오늘 발생한 주요 이슈

✅ 현상

  • choices 테이블에 선택지를 여러 번 등록/삭제하는 과정에서
  • ID가 1, 2, 3, 4가 아닌 5, 6, 7, 8부터 시작되는 현상 발생

🚨 원인

  • DELETE FROM choices 로 데이터만 삭제했기 때문!
  • MySQL은 DELETE 시 AUTO_INCREMENT를 초기화하지 않음

🔹 3. 해결 방법

1️⃣ AUTO_INCREMENT를 초기화하려면?

TRUNCATE TABLE choices;
  • 이렇게 하면 데이터 삭제 + ID가 1부터 다시 시작!

2️⃣ 만약 DELETE 후 ID만 초기화하고 싶다면?

DELETE FROM choices;
ALTER TABLE choices AUTO_INCREMENT = 1;
  • 주의: 테이블이 비어있을 때만 안전하게 사용 가능!

🔹 4. 실전 사용 팁

  • 테스트 데이터 초기화 시 ➔ TRUNCATE 권장
  • 실서비스 데이터 관리 시 ➔ 절대 TRUNCATE 사용 금지!
  • Foreign Key 제약조건이 있을 경우:
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE answers;
TRUNCATE TABLE choices;
SET FOREIGN_KEY_CHECKS = 1;

🔹 5. 요약

상황 추천 방법

테스트 데이터 전체 초기화 TRUNCATE
특정 조건 데이터만 삭제 DELETE WHERE 조건
AUTO_INCREMENT 강제 리셋 ALTER TABLE ...

다음부터 비슷한 상황이 생기면, 이 기준으로 빠르게 대응할 수 있을 것 같습니다!

기억할 것!
단순 삭제는 DELETE, 완전 초기화는 TRUNCATE!

#MySQL #TRUNCATE #DELETE #AUTO_INCREMENT #DB팁

'기술블로그' 카테고리의 다른 글

Flask Static 폴더를 활용한 이미지 관리 가이드  (0) 2025.04.25
Error: Failed to find Flask application or factory in module 'wsgi'.  (0) 2025.04.25
🚀 Flask 프로젝트에서 ORM과 CRUD 구현하기 (SQLAlchemy 활용)1-3  (0) 2025.04.24
🚀 Flask 프로젝트에서 routes.py와 services의 역할 이해하기(1-2)  (0) 2025.04.24
🚀 Git Flow 브랜치 전략 초기 셋팅 가이드(1-1)  (0) 2025.04.24
'기술블로그' 카테고리의 다른 글
  • Flask Static 폴더를 활용한 이미지 관리 가이드
  • Error: Failed to find Flask application or factory in module 'wsgi'.
  • 🚀 Flask 프로젝트에서 ORM과 CRUD 구현하기 (SQLAlchemy 활용)1-3
  • 🚀 Flask 프로젝트에서 routes.py와 services의 역할 이해하기(1-2)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (472) N
      • Python (31)
      • 프로젝트 (43)
      • 과제 (21)
      • Database (40)
      • 멘토링 (7) N
      • 특강 (18)
      • 기술블로그 (126) N
      • AI 분석 (4)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (34) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
MySQL TRUNCATE vs DELETE 차이점 정리
상단으로

티스토리툴바