我有一个在实体中运行的前端应用程序,我想要最佳实践来解决以下问题。有时,两个并发用户会执行相同的请求,他们在后端调用的函数会从数据库中选择最大数量并向其添加 1。这里的问题是,当两个并发请求从前端到后端触发时,我无法解决,因为两个请求同时触发相同的请求,并从数据库中选择相同的数字,因此两个请求都更新为相同的值,因此其中一个请求会覆盖另一个请求。他们之间的差距是毫秒但无法处理。
对于知识来说,后端应用程序是.net框架,数据库是Oracle 19g
我也不知道 2two 请求是并发还是并行进行。
您可以使用序列
解决下面提到的问题从数据库中选择最大编号并添加 1。
您可以创建一个以起始值作为当前最大值(列)的序列,如下所示
CREATE SEQUENCE seq_name start with 300 NOMAXVALUE INCREMENT BY 1;
然后使用 Sequence.nextval 获取下一个数字,如下所示
seq_name.nextval
编辑1:-由于您有不同的实体,您可以执行以下操作
select max(order_no),seq_name.nextval
from your_table;
如果您对相同的实体获得相同的 max(order_no),请检查 seq_name.nextval 值,并用 max(order_no)+2 增加该实体,并使用更大的 seq_name.nextval,然后对另一个实体使用 max(order_no)+1用户。还尝试每天删除并重新创建序列以进行更好的管理