我们有一个应用程序必须生成唯一的顺序序列号并将范围存储在数据库中.我们只需记录数字范围,我们将实际存储在其他地方
基本上,它是如何安装,现在是我们有三列一个简单的表SequenceStartNumber,SequenceEndNumber和AllocatedFor.
例如,行可能如下所示:
SequenceStartNumber SequenceEndNumber AllocatedFor
1 1000 CustomerXYZ
1001 2000 CustomerZZY
Run Code Online (Sandbox Code Playgroud)
一段代码将执行查询
SELECT MAX(SequenceEndNumber) + 1 AS FirstNumber
FROM SequenceNumberAllocation
Run Code Online (Sandbox Code Playgroud)
代码获取此查询的结果,添加它知道它需要的许多序列号,并执行插入
INSERT INTO SequenceNumberAllocation (SequenceStartNumber, SequenceEndNumber, AllocatedFor)
VALUES (%d, %d, 'CustomerABC')
Run Code Online (Sandbox Code Playgroud)
这样我们就有了这些数字块的运行列表,以及谁在使用它们.
这样可以正常工作,除了很明显这个方法不能解释并发性.假设(它还没有发生)两个同时进程可以同时执行第一个查询并获取相同的起始编号.
在insert子句完成之前阻止表的最佳方法是什么?这个操作应该以某种方式形成存储过程吗?SQL不是我最强的诉讼,因此我不得不问其他人可能是什么基本问题.谢谢你的时间.