0

所以我有一个保存库存信息的数据库。当工作人员更新该信息时,因为它在网上遇到了麻烦,其中数字被更改时需要最后一个人更新数字并将其用于所有值。

示例:Joe 更新小红莓还剩 3 个,并且在 3 时还没有接触沙拉。但 john 更新说沙拉是 0。当 Joe 按更新时,沙拉的值被设置回 3,因为他们的系统认为他也在更新它。

有什么办法可以解决这个问题??

4

4 回答 4

1

听起来(有点)像一个并发问题,但可能不是因为我们在谈论两个不同的领域。看看锁定: http ://dev.mysql.com/doc/refman/5.0/en/internal-locking.html

您可能希望查看 Joe 是如何获取他的信息的,因为如果仍然设置了 3 个沙拉并且 John 拿走了它们,那么 Joe 的视图不知道这三个沙拉已经消失并且当他单击更新时(假设他的所有信息都在他的视图中被送到DB)他无意中把沙拉放回去了。

于 2013-10-18T20:21:06.877 回答
1

如果两个用户都使用相同的 GUI,其中两个值(蔓越莓和沙拉)可以同时更改(例如通过按下保存按钮),您可以:

  1. 使用javascript将值已被用户更改的隐藏字段中存储信息,然后在PHP中保存数据时使用此值来省略未更改的值。
  2. 将每个属性的原始值存储在隐藏字段中,并将其与用户保存时的新值进行比较,以省略未更改的保存值。
  3. 修改您的 GUI(例如,添加复选框以解锁要更改值的输入
  4. 使用记录版本控制来防止第二个用户更改自显示给该用户以来已更改的记录。然后您可以打印一条消息,例如“对不起,此记录自显示以来已更改。请在进行更改之前刷新页面。

选择你最喜欢的那个。

于 2013-10-18T20:33:26.880 回答
0

这是一个常见的问题。

你可以:

于 2013-10-18T20:15:24.643 回答
0

部分问题似乎是您的 SQL 可能的构造方式。如果用户没有更改记录的值,则不应对该记录进行新的写入。

通过使用事务,您可以检查自流程开始以来该值是否已更改。这允许您根据结果提交或回滚事务。

MySQL 事务

例如,如果用户 A 正在检查 5 个可用沙拉中的 3 个。在用户 A 完成此过程之前,用户 B 也尝试检查 5 个可用沙拉中的 3 个。使用事务,您可以提供逻辑来检查以确保在提交之前有足够的沙拉来完成事务。如果检查失败,您可以回滚事务。这将防止用户 B 签出比可用沙拉更多的沙拉,即使在交易开始时显示器可能已经指示有 5 个可用沙拉。

于 2013-10-18T20:44:29.840 回答