当两个用户使用手动生成的用户ID在同一个表中插入记录时,如何避免竞争条件

时间:2014-07-16 10:06:47

标签: sql race-condition userid database-theory

我手动生成userId,即之前的userId + 1。

但如果有两个或更多用户阅读上一个userId并插入新记录。

因此,任何两个或更多用户都有可能使用相同的userId

插入记录

2 个答案:

答案 0 :(得分:1)

您可以读取以前的用户ID并在同一事务中插入记录。

必须将交易设置为使用正确的Isoltaion level:' Serializable'或者'可重复读取'至少。

遵循这种方法,在事务开始之后和提交之前,userid的增量将会下降。

RDBMS将处理竞争状况。

答案 1 :(得分:0)

您应该以某种方式对您的流程进行排队,并确保在给定时间内只处理一个流程。 最简单的方法是在select previous userid查询之前锁定某些内容,并在您已经插入记录后释放锁定。

否则这不是一个好习惯。 RDBMS系统有更好的解决方案。在RDBMS的文档中搜索序列,标识或auto_increment。