如何在数据库中递增一个字段,以便即使有成千上万个连接同时尝试递增它,最终也会变为1000(如果从零开始)。我的意思是,以便没有两个连接递增相同的数字导致丢失递增。如何同步并确保数据一致性?这是否需要存储过程?数据库“锁定”?如何实现?
你正在寻找的是一个Postgres SEQUENCE。调用nextval('sequence_name')来获取序列中的下一个数字。根据文档,序列的设计考虑了并发性:为避免阻塞从同一序列获取数字的并发事务,nextval操作永远不会回滚;也就是说,一旦获取了一个值,即使之后执行nextval的事务失败,该值也被视为已使用。这意味着中止的事务可能会在分配值的序列中留下未使用的“空洞”。编辑:如果您正在寻找无间断序列,2006年有人在PostgreSQL邮件列表上发布了一个解决方案:http://www.postgresql.org/message-id/44E376F6.7010802@seaworthysys.com。似乎还有一些关于锁定等的长时间讨论。即使从未有被接受的答案,"gapless-sequence"问题也曾在SO上提出过: postgresql generate sequence with no gap。