2012-12-15 6 views
0

샘플 레일스 애플리케이션에서 sqlite db를 사용하고 있습니다. 내 사용자 테이블에서 나는 모든 레코드를 User.delete_all을 사용하여 지 웠습니다. 하지만 지금은 언제든지 테이블에 User.create을 사용하여 새 레코드를 삽입 할 때 ID는 테이블에있는 마지막 레코드의 ID보다 하나 더 큰 값에서 시작합니다. 예를 들어 내 테이블에 5 개의 레코드가 있고 모두 지워진 경우 User.create를 실행하면 ID가 6으로 시작됩니다. ID를 1에서 다시 시작할 수있는 방법이 있습니까? 레일에서 sqlite db의 테이블에있는 id 필드를 재설정하십시오.

당신은 자동 증가는 id 컬럼에 대해 설정 것 같다

+0

나는 rake db : reset 또는 이와 유사한 방법으로 인덱스를 삭제할 수 있다고 생각합니다. 또는 다음을 사용할 수 있습니다. http://www.sqlite.org/lang_reindex.html. 그러나, 왜 이것을해야합니까 ?? – simonmorley

+0

rails 콘솔에서 다음을 실행하여 수정 : ActiveRecord :: Base.connection.execute ("sqlite_sequence에서 DELETE where name = 'users'") – Jim

답변

1

감사합니다. Sqlite는 sqlite_sequence이라는 내부 테이블에서이 값을 처리합니다. 당신은 쿼리하여 특정 자동 증가 활성화 된 테이블에 대한 ID를 재설정 할 수 있습니다 :

그러나
UPDATE "sqlite_sequence" SET "seq" = 0 WHERE "name" = $YOURTABLENAME 

, 이것은 자동 증가 기능은 사용자가 알고리즘에 영향을주지 않는 방식으로 사용하기위한 것입니다 때문에 좋은 생각이 아니다 . 이상적으로는 id의 실제 값을 신경 쓰지 말고 레코드의 고유 식별자로 간주해야합니다.

+0

답장을 보내 주셔서 감사합니다 :). 다른 방법은 레일즈 콘솔의 활성 레코드 api를 사용하는 것입니다. – Jim

2

비슷한 질문 : How to reset a single table in rails?. 우리는 sqlite 테이블에 대한 id 열을 1로 재설정하기 위해 레일 콘솔에서 다음을 실행할 수 있습니다.

ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = '<table_name>'") 
관련 문제