我正在尝试向网站添加记录锁定。这不是数据库锁定,我有2个进程同时编辑同一条记录,而是2个用户同时编辑同一条记录。情况如下:
我需要能够在1个人编辑时锁定记录,以便其他人可以同时进行记录更改(因此导致混淆)。可能发生的是用户A开始编辑记录。同时(在用户A保存记录之前),用户B开始编辑记录。现在,用户A使用值为“0001”的field_a保存记录。现在,用户B正在查看和编辑记录的过期版本。然后用户B保存记录,其值为“0002”。数据库的最终值为0002。
我可以理解发生了什么,但是用户很难弄清楚数据库中的值将是0002而不是0001.在我的情况下,他们使用这个数字将在线数据库中的记录与另一个数据相关联记录。当发生这种情况时,他们将在另一个系统中以2条记录结束在线系统中的1条记录。
我的想法是通过将用户的id放在字段中来“锁定”记录。 0时它没有被锁定。 > 0被锁定。
以下是关于事情如何发挥作用的想法:
我想知道的是,如果有任何我遗失的情况会引起悲伤,或者您对如何做到这一点有任何建议?
注意:我在PHP和MySQL工作,它是一个Web应用程序。我也不认为数据库中的记录锁定是我所需要的。
- 补充:来自Dan Hulton的建议是添加一个日期字段,用于存储上次检出的日期字段。这将消除脚本以检查过期检出。相反,系统只会在列出或限制记录编辑时检查此日期。
答案 0 :(得分:3)
嗯,你需要一些锁定方案。对于你所谈论的那种事情,人们经常使用“乐观锁定”,其效果如下:
当有人试图保存文件时,请检查版本号。如果版本号与您检索的版本号相同,则保存,然后增加版本号。 但是 如果版本号不等于您在打开文件时保存的版本号,则会发生冲突;当你不看时,别人已经改变了记录。
如果您有冲突,请让用户以某种方式解决。
(这被称为“乐观”,因为您假设大多数时候您不会有两个用户同时尝试更新。)
这个的悲观版本将是一个锁定字段。当有人打开记录进行编辑时,请检查该字段;如果它为0,则可以编辑,但随后在该字段中添加1。保存时,再次减1。如果它不是0,则拒绝让用户编辑。