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

标签 php mysql delphi remote-access zeos

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

在向其他用户授予对该记录的访问权限之前检查是否有人已经在编辑该记录,或者该记录的所有者是否是他自己,最好的方法(更简单且更有效的方法)是什么?再次在网站更新他的记录?

该软件仍在实验室中。但当我将其交付给客户时,我知道这将是一个问题。

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

最佳答案

您可以使用许多系统级方法来处理该问题。锁定记录以进行独占编辑只是其中之一,传统上由旧系统选择。

更现代的方法是允许两个编辑在不锁定的情况下继续进行 - 称为 optimistic concurrency control 。如果存在重叠编辑,请查看是否可以自动解决 - 事实上,许多同时进行的编辑不会引起争议,特别是当它们编辑记录的不相关部分时。

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

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

关于php - 如何在允许另一个用户编辑之前检查用户是否正在编辑表记录,而不是等待发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495560/

相关文章:

php - 在mamp上安装frapi?

mysql 查询插入不起作用

delphi - 启用MultiSelect的TListBox拖放问题

javascript - 用图像更新页面内的文本

delphi - 从 SocketHandle 获取 IP 和端口

php - DOMXPath 查询以获取表列中复选框的名称

php - 在 URL 查询中表示约 200 个 bool 标志

php - 在 CentOS 上使用 OpenSSL 重新编译 PHP

php - mySQL/PHP : SQL Statement, 查询和结果分配在一行中?

python - 从 Django 中具有相同表名的多个数据库获取数据