[短的]
我有以下情况:用户A
尝试将数据DA
插入数据库。要检查是否A
允许用户插入DA
,我需要运行查询并进行一些计算。我遇到的问题是,当我进行计算时,另一个用户 ( B
) 也尝试将数据插入到数据库中。现在,假设两个用户在插入新数据之前都读取了计算所需的信息,那么他们可能都被清除插入,而来自用户的数据A
将禁止用户B
插入,从而使数据库处于不一致状态。
如何在 Azure SQL 数据库 V12 中解决这种并发问题?
[详细的]
用户插入的数据是时间间隔的开始和结束,例如start: 6:00, end: 7:00
。要求是不能有时间间隔重叠。这意味着区间start: 6:00, end: 9:00
和start: 5:00, end: 6:00
不能同时存在。目前我正在做的是检查是否有任何行与用户尝试使用以下查询插入的新间隔重叠:
SELECT COUNT(*) FROM [Table1] WHERE Start <= attempEnd && End >= attemptStart
Run Code Online (Sandbox Code Playgroud)
现在,问题是多个用户可能试图插入一个间隔,而这些新间隔可能相互重叠。但是,在上面的查询运行时,此信息可能不可用,这会导致插入重叠间隔。
如何在 Azure SQL 数据库 V12 中解决这种并发问题?