我正在寻找一种自动增加列的方法,类似于自动:id列的方式。我可能可以在模型中以某种方式处理这个问题,但那似乎有些笨拙。我在Rails 3中没有找到任何处理这个问题的库;是否有可用的宝石可以处理这个问题?我很惊讶这不是一个选项,因为Rails已经为主键列处理了这个行为。
我正在寻找一种自动增加列的方法,类似于自动:id列的方式。我可能可以在模型中以某种方式处理这个问题,但那似乎有些笨拙。我在Rails 3中没有找到任何处理这个问题的库;是否有可用的宝石可以处理这个问题?我很惊讶这不是一个选项,因为Rails已经为主键列处理了这个行为。
通常,自动递增列是使用数据库序列实现的。使用序列而不是计算下一个递增值的优点在于,从序列获取下一个值是原子性的。因此,如果您有多个进程创建新元素,则序列将确保您的数字真正唯一。
序列可用于postgresql、oracle、mysql等。
例如,如果您正在使用postgres,如何实现此功能:
从序列中选择下一个值:
Integer(Operator.connection.select_value("SELECT nextval('#{sequence_name}')"))
创建序列:
Operator.connection.execute("CREATE sequence #{sequence_name}")
设置序列的起始值:
Operator.connection.execute("SELECT setval('#{sequence_name}', #{new_start_serial})")
希望这有所帮助。