0

我有很多关于数据库的数据,很多用户正在通过异步 JS 更新这些数据。我想防止多个用户修改数据库上的同一行。当用户 1 单击网页中的编辑行时,我想向服务器发送信号并锁定该行。因此其他用户将无法访问同一行的编辑模式。当用户完成编辑行时,他/她将单击确定,将提交更新并解锁行。我在谷歌上搜索了这种方法,但所有 sql 锁都是针对单个事务的。有没有办法做到这一点?我很乐意在不改变我的数据库设计的情况下解决这个问题。但是如果没有改变就没有解决方案,很多工作将等着我:)

4

1 回答 1

0

尝试这样做:http ://en.wikipedia.org/wiki/Optimistic_concurrency_control

每当保存该行时,就会对 lock_version 字段进行计数。每当在这一行上发生保存时,它都会查看数据库上的 lock_version 是否与内存中保存的相同。如果版本不同,则该行已被其他用户更改。在这里你可以做任何事情:

  1. 从数据库重新加载行并添加更改,然后重新保存
  2. 只是抛出一个异常,让用户处理它

如果您真的想要对您的建议有所帮助,您将需要在行上使用某种标志来处理这个问题,您在用户编辑行时设置该标志。

  1. 用户开始编辑该行 -> 将标记锁定为真
  2. 另一个用户尝试编辑该行 -> 标志将阻止这种情况
  3. 用户结束编辑行 -> 将标记锁定为 false

然而,这会给你带来各种各样的问题......尽量避免这种复杂的锁处理,并使用一些简单的东西,比如乐观锁

于 2013-04-01T09:08:53.827 回答