0

用户 A 和用户 B 正在修改同一记录的同一列,当 A 完成时,该列的值发生变化。

如何防止 B 覆盖 A 输入的数据或仅显示一些提示?

我之前使用的方法是添加一个标记“更新计数(每次更新增加1)”的列。每次有人更新列之前,他/她都会得到标记,所以当他/她提交更新时,标记将与数据库进行比较,当不同时,有人更改了它。

还有其他想法吗?

4

1 回答 1

0

我假设如果数据已更改,您希望用户 B 提交失败。

您可以使用此模式:

  1. 保留数据的两份副本,数据之前和数据之后。
  2. 当用户对列进行更改时,您只会更新之后的数据。
  3. 当你提交你的数据时,你会这样做:
  4. 向数据库启动事务
  5. 读取数据库中的当前值
  6. 将当前值与您保存的之前值进行比较
  7. 如果值相同,那么您可以编写新值。
  8. 如果它们不同,则向用户报告错误。

另一种模式是这样的:

  1. 将时间戳列添加到您的表中。
  2. 保存您读取的数据的时间戳。
  3. 当你提交你的数据时,你会这样做:
  4. 向数据库启动事务
  5. 读取数据库中的当前时间戳
  6. 与您保存的时间戳进行比较
  7. 如果值相同,那么您可以写入新值并更新时间戳列以指示您已对该行进行了更改。
  8. 如果它们不同,则向用户报告错误。

这是使用乐观并发事务控制(https://en.wikipedia.org/wiki/Optimistic_concurrency_control)时数据库自己做什么的程序化表示。

于 2015-10-28T07:22:23.320 回答