반응형
MySQL 테이블에서 모든 행을 삭제하고 ID를 0으로 재설정
테이블에서 모든 행을 삭제해야하지만 새 행을 추가 할 때 자동 증가가있는 기본 키 ID가 1에서 각각 0에서 다시 시작되기를 원합니다.
삭제하지 말고 자르십시오.
Truncate table XXX
테이블 핸들러는 마지막으로 사용한 AUTO_INCREMENT 값을 기억하지 않지만 처음부터 계산을 시작합니다. 일반적으로 시퀀스 값을 재사용하지 않는 MyISAM 및 InnoDB의 경우에도 마찬가지입니다.
소스 .
TRUNCATE
외래 키 제약으로 인해 사용할 수없는 경우 모든 행을 삭제 한 후 alter 테이블을 사용하여 auto_increment를 다시 시작할 수 있습니다.
ALTER TABLE mytable AUTO_INCREMENT = 1
테이블에 외래 키가 있으면 항상 다음 코드를 사용합니다.
SET FOREIGN_KEY_CHECKS = 0; -- disable a foreign keys check
SET AUTOCOMMIT = 0; -- disable autocommit
START TRANSACTION; -- begin transaction
/*
DELETE FROM table_name;
ALTER TABLE table_name AUTO_INCREMENT = 1;
-- or
TRUNCATE table_name;
-- or
DROP TABLE table_name;
CREATE TABLE table_name ( ... );
*/
SET FOREIGN_KEY_CHECKS = 1; -- enable a foreign keys check
COMMIT; -- make a commit
SET AUTOCOMMIT = 1 ;
그러나 실행 시간에 차이가 있습니다. 위의 Sorin의 답변을보십시오.
흥미로운 사실.
나는 TRUNCATE
항상 더 잘 수행 할 것이라고 확신 했지만 내 경우에는 외래 키가 약 30 개의 테이블이 있고 몇 개의 행만 채워진 데이터베이스의 경우 TRUNCATE
수백 밀리 초가 아닌 모든 테이블 에 약 12 초가 걸렸습니다 DELETE
. 행. 자동 증분을 설정하면 약 1 초가 추가되지만 여전히 훨씬 좋습니다.
따라서 두 가지를 모두 시도해보십시오. 귀하의 경우 더 빨리 작동하는 것을보십시오.
참고 URL : https://stackoverflow.com/questions/12651867/mysql-delete-all-rows-from-table-and-reset-id-to-zero
반응형
'Programing' 카테고리의 다른 글
요청과 응답을 어떻게 조롱 할 수 있습니까? (0) | 2020.05.26 |
---|---|
Java 캘린더를 사용하여 날짜에서 X 일을 빼는 방법은 무엇입니까? (0) | 2020.05.26 |
Java List. contains (필드 값이 x 인 객체) (0) | 2020.05.26 |
확인란 클릭시 이벤트 버블 링을 중지하는 방법 (0) | 2020.05.26 |
ORA-00054 : 자원이 바쁘고 NOWAIT를 지정해 취득 또는 타임 아웃이 만료되었습니다 (0) | 2020.05.26 |