我不确定如何简明扼要地提出这个问题,所以我将通过情境背景来解释.
用户A决定他想通过HTML表单修改MySQL行.同时,User-B决定他也想以相同的方式修改相同的MySQL行.
我们会说MySQL-row是一个包含文本的文本字段, 'Can\'t touch this'
这两个用户不了解每个人的意图.
User-A对MySQL行进行了重大更改并将其保存到数据库中.MySQL行变成了'Can\'t touch this was a popular track by the Hip-Hop artist M.C. Hammer.'
User-B对MySQL行进行微小更改并将其保存到数据库中.MySQL行变成了'Cannot touch this. Please avoid contractions.'
因为User-B决定在User-A完成修改之前修改MySQL行,所以修改User-A会被User-B的修改覆盖.
允许同时编辑数据库行的脚本(如MediaWiki或任何其他wiki软件)如何处理?
最简单的解决方案是向任何可以以这种方式编辑的表添加至少一个额外字段.表示该行被锁定的东西.为了增加实用性,您应该记录行何时被锁定以及由谁锁定.
还需要一个解锁被放弃的记录的定时作业,否则有人可以按顺序编辑每个记录,放弃编辑,并锁定整个数据库.
在SO上发生了类似的事情.如果您正在编辑某人的问题而其他人在您工作时保存了一个编辑内容,则会发出问题已被更改且您的编辑不再有效的通知.