我有很多关于数据库的数据,很多用户都是通过异步JS更新这些数据。 我想防止多个用户修改db上的同一行。当用户1单击网页中的编辑行时,我想向服务器发送信号并锁定该行。因此其他用户将无法在同一行上访问编辑模式。当用户完成编辑行时,他/她将单击“确定”,将提交更新并将解锁行。我搜索谷歌这种方法,但所有的SQL锁是单一交易。有没有办法实现这个目标?我很乐意在不改变我的数据库设计的情况下解决这个问题。但如果没有没有改变的解决方案,很多工作都会等着我:)
答案 0 :(得分:0)
尝试一下:http://en.wikipedia.org/wiki/Optimistic_concurrency_control
每当保存行时,会对lock_version字段进行计数。每当在该行上发生保存时,它将查看数据库上的lock_version是否与内存中保存的一样。如果版本不同,则该行已被另一个用户更改。在这里你可以做任何事情:
如果你真的想要一些你所建议的东西,那么你需要用行上的某种标志来处理这个问题,你在用户编辑这行时就会设置它。
但是,这会给你带来各种各样的问题......尽量避免这种错综复杂的锁定处理,并采用像乐观锁定这样的简单方法