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 "성능 스키마 요약 테이블" 을 참조하십시오.