如何检查是否有人在编辑同一实体

时间:2018-11-25 14:55:04

标签: mysql concurrency

让我们在管理面板中说,一个编辑任何实体的用户说产品是一种方法,如果另一个试图编辑相同实体/产品信息的用户能够收到通知或“其他人已经在编辑该实体/产品信息”一样,所以请他等”。

1 个答案:

答案 0 :(得分:0)

您需要一种将实体标记为忙碌的方式。

一种好方法:在实体表中添加两列。

    busy_user   INT          either a user id or zero
    busy_until  TIMESTAMP    the time when the busy setting expires, in case the user goes away

然后,当用户尝试编辑项目时,您可以执行以下操作:

  1. 如果busy_user非零且不是当前用户,并且busy_until > NOW()拒绝编辑请求;该项目很忙。
  2. busy_user设置为当前用户的ID。将busy_until设置为NOW() + INTERVAL 5 MINUTE
  3. 根据需要进行编辑。

用户完成编辑后,将busy_user设置为零。