Loading...
MySQL 9.5 Reference Manual 9.5의 15.1.42 TRUNCATE TABLE Statement의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
1TRUNCATE [TABLE] tbl_name
TRUNCATE TABLE은 테이블을 완전히 비웁니다. 이 문장을 실행하려면 DROP 권한이 필요합니다. 논리적으로, TRUNCATE TABLE은 모든 행을 삭제하는 DELETE 문장이나 DROP TABLE과 CREATE TABLE 문장의 시퀀스와 유사합니다.
고성능을 달성하기 위해 TRUNCATE TABLE은 데이터를 삭제하는 DML 방식을 우회합니다. 따라서 ON DELETE 트리거가 실행되지 않으며, 부모-자식 외래 키 관계를 가진 InnoDB 테이블에 대해서는 수행할 수 없고, DML 작업처럼 롤백할 수 없습니다.
그러나 원자적 DDL을 지원하는 스토리지 엔진을 사용하는 테이블에 대한 TRUNCATE TABLE 작업은 작업 중 서버가 중지되면 전부 커밋되거나 롤백됩니다. 자세한 내용은 Section 15.1.1, “Atomic Data Definition Statement Support”를 참조하십시오.
TRUNCATE TABLE은 DELETE와 유사하지만, DML 문장이 아닌 DDL 문장으로 분류됩니다. 다음과 같은 점에서 DELETE와 다릅니다:
Truncate 작업은 테이블을 드롭하고 다시 생성하므로, 특히 큰 테이블의 경우 행을 하나씩 삭제하는 것보다 훨씬 빠릅니다.
Truncate 작업은 암묵적 커밋을 발생시키므로 롤백할 수 없습니다. Section 15.3.3, “Statements That Cause an Implicit Commit”를 참조하십시오.
세션이 활성 테이블 락을 보유하고 있는 경우에는 truncation 작업을 수행할 수 없습니다.
다른 테이블에서 해당 테이블을 참조하는 FOREIGN KEY 제약이 있는 경우, InnoDB 테이블이나 NDB 테이블에 대한 TRUNCATE TABLE은 실패합니다. 같은 테이블의 열 사이에 있는 외래 키 제약은 허용됩니다.
Truncation 작업은 삭제된 행 수에 대해 의미 있는 값을 반환하지 않습니다. 일반적인 결과는 “0 rows affected”이며, 이는 “정보 없음”으로 해석해야 합니다.
테이블 정의가 유효한 한, 데이터나 인덱스 파일이 손상되었더라도 TRUNCATE TABLE로 테이블을 비어 있는 테이블로 다시 생성할 수 있습니다.
모든 AUTO_INCREMENT 값은 시작 값으로 리셋됩니다. 이는 일반적으로 시퀀스 값을 재사용하지 않는 MyISAM과 InnoDB에도 동일하게 적용됩니다.
파티션 테이블에 사용되는 경우 TRUNCATE TABLE은 파티셔닝을 유지합니다. 즉, 데이터 및 인덱스 파일은 드롭되고 다시 생성되지만, 파티션 정의는 영향을 받지 않습니다.
TRUNCATE TABLE 문장은 ON DELETE 트리거를 호출하지 않습니다.
손상된 InnoDB 테이블에 대한 truncate는 지원됩니다.
TRUNCATE TABLE은 바이너리 로깅 및 복제 측면에서 DML이 아닌 DDL로 처리되며, 항상 스테이트먼트 방식으로 로깅됩니다.
테이블에 대한 TRUNCATE TABLE은 HANDLER OPEN으로 열려 있던 해당 테이블의 모든 핸들러를 닫습니다.
TRUNCATE TABLE은 Performance Schema summary 테이블에 사용할 수 있지만, 그 효과는 행을 제거하는 것이 아니라 summary 컬럼을 0 또는 NULL로 리셋하는 것입니다. Section 29.12.20, “Performance Schema Summary Tables”를 참조하십시오.
File-per-table 테이블스페이스에 존재하는 InnoDB 테이블을 truncate하면 기존 테이블스페이스를 드롭하고 새로운 테이블스페이스를 생성합니다. 테이블스페이스가 이전 버전에서 생성되었고 알 수 없는 디렉터리에 존재하는 경우, InnoDB는 기본 위치에 새로운 테이블스페이스를 생성하고 에러 로그에 다음 경고를 기록합니다: DATA DIRECTORY 위치는 알려진 디렉터리여야 합니다. DATA DIRECTORY 위치는 무시되며 파일은 기본 datadir 위치에 저장됩니다.
알려진 디렉터리는 datadir, innodb_data_home_dir, innodb_directories 변수에 의해 정의된 디렉터리입니다. 현재 위치에 테이블스페이스를 생성하도록 TRUNCATE TABLE을 사용하려면, TRUNCATE TABLE을 실행하기 전에 해당 디렉터리를 innodb_directories 설정에 추가하십시오.
15.1.41 RENAME TABLE Statement
15.2 Data Manipulation Statements