【问题标题】:How to prevent covering previous data when multi users update the same record in mysql?当多用户更新mysql中的同一条记录时,如何防止覆盖以前的数据?
【发布时间】:2015-10-28 06:59:39
【问题描述】:

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

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

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

还有其他想法吗?

【问题讨论】:

    标签: mysql sql tsql database-concurrency


    【解决方案1】:

    我假设您希望用户 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) 时数据库自己执行的操作的编程表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      相关资源
      最近更新 更多