0

假设我们在 SQL 中生成我们的订单号。通常我得到下一个数字

SELECT COUNT(numbers)+1 FROM X

等等

问题是,我想先给用户这个号码,然后等待用户输入内容,然后插入表格。但是由于有多个用户,我也希望他们得到号码而不是与第一个用户相同的号码,有没有办法更优雅地做到这一点?不久,我希望将号码保留给特定用户,如果他这样做,则将其插入,如果没有,只需释放该号码。

4

3 回答 3

4

创建一个数字表。使用值预先填充表并将此表用作队列。事务可以通过对一行进行出队来保留一个数字。回滚时,该号码将再次可用。由于 using-a-table-as-queue 的 readpast 语义,其他事务可以同时出列其他数字。根据需要添加更多数字(插入更多行)。

如果这看起来有点矫枉过正,请放心:事实并非如此。简单的解决方案可能不考虑并发或回滚,这不是微不足道的解决方案。

于 2013-02-04T11:54:01.437 回答
0

您可以插入表中,然后在用户提交数据时对其进行更新。

要绕过“释放”数字,您可以: 在桌子上放置一个标志来说明该行是否“空闲”。当您第一次插入标志时,它是“非免费的”。如果用户提交了他们的数据,请将其保持为“非免费”。

如果他们发布了他们的号码,请将其标记为“免费”。

为用户分配数字时,找到第一个“空闲”行,如果没有,则插入新行。

于 2013-02-04T12:30:43.097 回答
0

如果您不需要在系统中连续排列所有数字而没有间隙,您可以制作包含身份类型列的简单表格。因此,将虚假记录插入其中并@@IDENTITY用作生成的数字。这种解决方案当然有一些缺点,正如 Remus Rusanu 提到的“幼稚解决方案”。

如果可能,请避免在真正将其存储到数据库之前将其显示给用户。您可以生成一些抽象数字以供临时参考,例如从日期和时间,并且在将数据插入数据库后,您可以显示您的真实数字。几乎不需要编码,但 100% 可靠。

于 2013-02-04T15:08:19.793 回答