MySQL 테이블에 저장된 모든 레코드(데이터)를 한 번에 삭제하려면 TRUNCATE 문을 사용하는 것이 가장 간단하고 효율적인 방법입니다.
TRUNCATE 기본 문법
TRUNCATE TABLE yourTableName;
위 구문을 실행하면 해당 테이블의 모든 레코드가 즉시 삭제됩니다. 실제 동작 과정을 이해하기 위해 예제 테이블을 만들어 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 다음 쿼리로 테이블을 생성합니다.
mysql> create table DeleteAllFromTable -> ( -> PersonId int, -> PersonName varchar(200) -> ); Query OK, 0 rows affected (0.67 sec)
2. 샘플 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DeleteAllFromTable values(100,'Johnson'); Query OK, 1 row affected (0.10 sec) mysql> insert into DeleteAllFromTable values(101,'John'); Query OK, 1 row affected (0.22 sec) mysql> insert into DeleteAllFromTable values(102,'Carol'); Query OK, 1 row affected (0.47 sec) mysql> insert into DeleteAllFromTable values(103,'Sam'); Query OK, 1 row affected (0.19 sec)
3. 현재 데이터 확인
SELECT 문으로 저장된 전체 레코드를 조회합니다.
mysql> select *from DeleteAllFromTable;
실행 결과는 다음과 같습니다.
+----------+------------+ | PersonId | PersonName | +----------+------------+ | 100 | Johnson | | 101 | John | | 102 | Carol | | 103 | Sam | +----------+------------+ 4 rows in set (0.00 sec)
4. TRUNCATE로 전체 레코드 삭제
이제 TRUNCATE 명령어를 사용해 테이블의 모든 레코드를 삭제합니다.
mysql> TRUNCATE TABLE DeleteAllFromTable; Query OK, 0 rows affected (0.80 sec)
5. 삭제 결과 확인
모든 레코드가 삭제되었으므로 SELECT 문을 실행하면 아무 데이터도 조회되지 않습니다.
mysql> select *from DeleteAllFromTable; Empty set (0.00 sec)
위 출력 결과에서 확인할 수 있듯이, 테이블에는 더 이상 어떤 레코드도 남아 있지 않습니다.
TRUNCATE와 DELETE의 차이점
참고로 TRUNCATE는 DELETE와 달리 WHERE 절 없이 테이블 전체를 빠르게 비우며, AUTO_INCREMENT 값도 초기화됩니다. 또한 개별 행을 로깅하지 않기 때문에 대용량 테이블을 초기화할 때 DELETE보다 훨씬 빠른 성능을 보입니다. 다만 한 번 실행하면 되돌릴 수 없으므로, 중요한 데이터가 있는 경우 반드시 백업 후 사용하는 것이 좋습니다.