기본 키 값이 1부터 다시 시작되기를 원합니다.
답변:
SQLite에서 인덱스 / 기본 키를 재설정하려면 다음을 입력하십시오.
$ rails console
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'yourtablename'")
ActiveRecord::Base.connection.execute("DELETE from 'yourtablename'")했고 그것은 나에게 그런 말 sqlite_sequence where name = 'yourtablename' is not a valid table name이나 비슷한 오류를 줄 것이기 때문에 작동했습니다 .
저와 같은 많은 사람들이 테이블의 모든 데이터를 삭제하는 방법을 찾기 위해 여기에 왔습니다. 여기 있습니다 :
$ rails console
> ModelName.delete_all
또는
> ModelName.destroy_all
destroy_all은 종속성 및 콜백을 확인하고 시간이 조금 더 걸립니다. delete_all은 직접적인 SQL 쿼리입니다.
자세한 정보 : http://apidock.com/rails/ActiveRecord/Base/delete_all/class
Rails 콘솔에서 다음을 사용하여 테이블의 모든 항목을 삭제 한 다음 인덱스 카운터 (Ruby 2 및 Rails 4)를 재설정했습니다.
> ModelName.delete_all
> ActiveRecord::Base.connection.reset_pk_sequence!('plural_model_name')
model_name재설정 명령에서 모델의 단수 이름이 아닌 테이블의 실제 이름과 같이 복수형이 필요하다는 것입니다.
ActiveRecord::Base.connection.reset_pk_sequence!(:plural_model_name).
Rails 4.2부터 ActiveRecord 연결truncate 에서 직접 사용할 수 있습니다 .
ActiveRecord::Base.connection.truncate(:table_name)
이 모든 데이터를 쳐 하고 자동 증가 카운터를 재설정 표에. MySQL 및 Postgres에서 작동하며 Sqlite 에서는 작동 하지 않습니다 .
gem 'database_cleaner'Gemfile에 추가 하고을 실행 $ bundle install한 후 다음을 수행하십시오.
> DatabaseCleaner.clean_with(:truncation, :only => ['yourtablename'])
더 많은 테이블을 지정할 수 있습니다.
> DatabaseCleaner.clean_with(:truncation, :only => ['table1', 'table2', 'table3'])
마지막 매개 변수를 그대로두면 전체 데이터베이스가 잘립니다.
> DatabaseCleaner.clean_with(:truncation) # your database is truncated
Rails 4.2.0 및 Sqlite3를 사용하고 있습니다.
저에게 도움이 된 것은 다음과 같습니다 (위의 모든 것에서 약간 가져옴).
$ rails c
> ModelName.delete_all
> ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'table_name'")
그런 다음 인덱스가 1부터 시작하여 테이블에 새 레코드를 추가 할 수있었습니다.
Person.connection.execute('delete from people' )Person.connection.execute("update sqlite_sequence set seq = 0 where name = 'People'" )