[mysql] 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 초가 추가되지만 여전히 훨씬 좋습니다.

따라서 두 가지를 모두 시도해보십시오. 귀하의 경우 더 빨리 작동하는 것을보십시오.


답변

사용 truncate하려면 이것을 사용하십시오 :

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table $table_name;
SET FOREIGN_KEY_CHECKS = 1;


답변