테이블에서 모든 행을 삭제해야하지만 새 행을 추가 할 때 자동 증가가있는 기본 키 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;