如何避免因数据库并发而导致业务规则违规?

时间:2018-01-05 15:24:14

标签: database concurrency

我无法想出更好的方式在标题中描述我的问题。对不起,如果这个问题的标题让你感到困惑。

假设我有一个用于管理学校课程的Web应用程序,其中包含以下两个表: enter image description here

业务规则是课程的学生人数不能超过最大值。 当有人试图注册课程时,我们有以下逻辑:

  1. 从数据库查询当前学生人数和该课程学生的最大人数
  2. 检查当前学生人数<最大stuent数
  3. 如果验证通过
  4. ,则向学生插入新行

    但是,当存在并发请求时似乎存在问题。 假设有一个MaxNumOfStudent = 20的课程,已经有19名学生注册。

    然后,当有两个人同时尝试注册课程时,从数据库查询的当前学生数将为19。因此,他们都将成功注册课程,使该课程(21)的学生人数大于最大值(20)。

    我在google上发现处理数据库并发的唯一方法是添加时间戳或行版本,但这不能处理上述情况。我该如何处理这个问题?

0 个答案:

没有答案