我希望主键值再次从1开始。
Answers:
要在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
在reset命令中需要使用复数形式,例如表的实际名称而不是模型的单数名称。
ActiveRecord::Base.connection.reset_pk_sequence!(:plural_model_name)
。
从Rails 4.2开始,您可以truncate
直接在ActiveRecord连接上使用:
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'" )