如何在允许另一个用户编辑而不是等待发布之前检查用户是否正在编辑表记录


How to check if a user is edting a table record before allowing another user to edit, not wait for post?

我正在开发一个艺术家简介网站和一个桌面软件来管理其数据库内容。许多运营商将在收件箱中收到相同数量的待修改记录,以供审批和发布。问题是当两个或多个操作员试图编辑同一条记录时。如果数据库服务器(远程mysql)将引发锁定错误,或者只维护最后保存它的操作员的数据。

在将对该记录的访问权限授予另一用户之前,检查是否有人已经在编辑该记录,或者该记录的所有者本人是否正在网站中再次更新其记录,最好的方法(更简单、更高效的方法)是什么

软件还在实验室里,但当我把它交给客户时,我知道它会有问题。

我可以创建一个表,将每条记录标记为"编辑中"或"空闲",这样我就不需要更改表的结构(因为人们已经在网站上使用了它们)。但我需要确保有一种更优雅/更快的方法来做到这一点。

有许多系统级方法可以用来处理这个问题。锁定记录进行独占编辑只是一种,传统上由旧系统选择。

更现代的方法是允许在不锁定的情况下进行两种编辑;称为乐观并发控制。如果存在重叠编辑,请查看是否可以自动解决;事实上,许多同时编辑都没有争议,尤其是当它们编辑了记录中不相关的部分时。

在发生冲突的情况下,重要的是不要简单地丢失第一个编辑:第一个编辑器已经收到成功事务的信号。责任是向第二个编辑器指示他们的编辑与先前的编辑冲突。通常,最好的方法是向他展示他提出的更改以及其他最近的更改,并让他们选择要做的事情:放弃更改、覆盖以前的更改(可能会向第一个编辑器发出指示)或手动合并更改。

这可能没什么大不了的。对您的系统的描述表明,用户不会与值得编辑的事件密切同步。每次编辑发生的随机时间表明,编辑冲突很少发生。在这种情况下,也许您的空闲/编辑指示就足够了。