13.1.33 TRUNCATE TABLE 구문
TRUNCATE [TABLE] tbl_name TRUNCATE TABLE 은 테이블을 완전히 비 웁니다. 여기에는 DROP 권한이 필요합니다.
TRUNCATE TABLE 은 논리적으로 모든 행을 삭제하는 DELETE 문이나 DROP TABLE 및 CREATE TABLE 문 시퀀스와 비슷합니다. 고성능을 실현하기 위해 데이터를 삭제하기위한 DML 방법을 무시합니다. 따라서 롤백 할 수 없으며, ON DELETE 트리거가 시작되는 것은 아니고, 또한 부모와 자식의 외부 키 관계를 가진 InnoDB 테이블에 대해 수행 할 수 없습니다.
TRUNCATE TABLE 은 DELETE 를 닮은에도 불구하고, DML 문 대신 DDL 문으로 분류됩니다. MySQL 5.6에서는 DELETE 는 다음과 같은 점에서 다릅니다.
잘라 내기 작업 테이블을 삭제하고 다시 만드는 데 특히 큰 테이블의 경우 행을 하나씩 제거하는 것보다 훨씬 빠릅니다.
잘라 내기 작업은 암시 적 커밋을 발생시키기 위해 롤백 할 수 없습니다.
세션이 활성 테이블 잠금을 보유하고있는 경우는, 절약 작업을 수행 할 수 없습니다.
TRUNCATE TABLE은InnoDB테이블에서이 테이블을 참조하는 다른 테이블에서 어떠한FOREIGN KEY제약이 존재하는 경우 실패합니다. 같은 테이블의 컬럼 간의 외래 키 제약 조건이 허용됩니다.자르기 작업은 삭제 된 행 수에 대해 의미있는 값을 반환하지 않습니다. 보통의 결과는 "0 rows affected"하지만 이것은 "정보가없는"것으로 해석합니다.
테이블 형식 파일
가 활성화되어있는 한 데이터 또는 인덱스 파일이 손상된 경우에도tbl_name.frmTRUNCATE TABLE을 사용하여 테이블을 빈 테이블로 다시 만들 수 있습니다.AUTO_INCREMENT값은 모두 그 시작 값으로 재설정됩니다. 이것은 일반적으로 시퀀스 값을 재사용하지MyISAM과InnoDB에 적용됩니다.파티션 된 테이블에서 사용 된 경우
TRUNCATE TABLE은 그 분할을 유지합니다. 즉, 데이터 및 인덱스 파일이 삭제되고 다시 생성되는 반면 파티션 정의 (.par) 파일은 영향을받지 않습니다.TRUNCATE TABLE문은ON DELETE트리거를 시작하지 않습니다.
테이블에 TRUNCATE TABLE 은 HANDLER OPEN 에서 열린 테이블의 모든 핸들러를 닫습니다.
TRUNCATE TABLE 은 바이너리 로깅 및 복제 목적의 경우, DROP TABLE 과 연속 CREATE TABLE 로, 즉 DML 대신 DDL로 처리됩니다. 이것은 InnoDB 또는 다른 트랜잭션 스토리지 엔진 (트랜잭션 격리 수준이 명령문 기반 로깅을 허용하지 않습니다 ( READ COMMITTED 또는 READ UNCOMMITTED ))를 사용하는 경우, STATEMENT 또는 MIXED 로깅 모드 사용시에 문이 기록되지 않고 복제되지 않은 사실에 근거합니다. (Bug # 36763) 그러나 InnoDB 를 사용하는 리플리케이션 슬레이브는 여전히 앞에서 설명한 방법으로 적용됩니다.
TRUNCATE TABLE 은 성능 스키마의 요약 테이블에서 사용할 수 있지만 그 효과는 행의 삭제가 아닌 요약 컬럼을 0 또는 NULL 로 재설정하는 것입니다. 섹션 22.9.9 "성능 스키마 요약 테이블" 을 참조하십시오.