我在Rails中有一个"帐户"模型,在数据库中有相应的"帐户"表.如果我擦除数据库并重新开始,'account_id'字段将始终从1开始并从那里开始计数.我想更改起始编号,这样,当在新数据库中创建第一个帐户时,'account_id'就是1000.有没有办法在Rails中执行此操作,或者我是否需要专门的数据库独立的SQL代码?
为了便于说明,这里是我的"帐户"表的简化版本:
create_table "accounts", :force => true do |t|
t.string "email", :null => false
t.string "crypted_password", :null => false
t.string "name", :null => false
t.boolean "email_verified", :default => false
end
Run Code Online (Sandbox Code Playgroud)
Llu*_*uís 15
对于PostgreSQL:
execute("ALTER SEQUENCE accounts_id_seq START with 1000 RESTART;")
Run Code Online (Sandbox Code Playgroud)
请参阅https://www.postgresql.org/docs/current/static/sql-altersequence.html
小智 10
您需要执行一些专门的数据库相关SQL才能获得此功能.
如果您使用的是MySQL,则可以在代码之后将以下代码添加到迁移中create_table:
execute("ALTER TABLE tbl AUTO_INCREMENT = 1000")
Run Code Online (Sandbox Code Playgroud)
小智 5
对于sqlite
序列存储在表中sqlite_sequence(name,seq)
首先检查序列是否已存在?
select name,seq from sqlite_sequence where name = 'accounts'
如果sequence.empty?
insert into sqlite_sequence(name,seq) values('accounts', 1000);
其他
update sqlite_sequence set seq = 1000 where name = 'accounts';
一种纯 Ruby、独立于数据库的方法可能是:
class MyModel
before_create do
self.id = [1000, (self.class.maximum(:id) || 0) + 1].max if self.id.nil?
end
end
Run Code Online (Sandbox Code Playgroud)
当您一次创建大量记录时,这可能表现不佳。
| 归档时间: |
|
| 查看次数: |
7128 次 |
| 最近记录: |