所以我有一个包含库存信息的数据库。由于工作人员更新了该信息,因为它在线时遇到问题,因为更改数字会使最后一个人更新数字并将其用于所有值。
示例:Joe更新蔓越莓剩下3个,并且仍然没有在3处接触沙拉。但是john更新了沙拉是0.当Joe按下更新时,沙拉的值被设置回3,因为他们的系统认为他正在更新它也。
我能解决这个问题吗?
答案 0 :(得分:1)
听起来(有点)像并发问题,但也许不是因为我们在谈论两个不同的领域。看看锁定:http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html
您可能希望了解Joe如何获取他的信息,因为如果仍然设置了3个沙拉并且John接受了它们,那么Joe的视图不知道三个沙拉已经消失以及何时他点击更新(假设他的所有信息)在他看来被发送到DB)他无意中把沙拉放回去了。
答案 1 :(得分:1)
如果两个用户都使用相同的GUI,其中两个值(蔓越莓和沙拉)可以一次更改(例如,通过按保存按钮),您可以:
选择你最喜欢的那个。
答案 2 :(得分:0)
这是一个常见问题。
你可以:
答案 3 :(得分:0)
部分问题似乎是您可能构建SQL的方式。如果用户没有更改记录的值,则不应该对该记录进行新的写入。
通过使用事务,您可以检查自进程启动以来值是否已更改。这允许您提交或回滚事务,具体取决于结果。
例如,如果用户A正在检查5个可用沙拉中的3个。在用户A完成此过程之前,用户B也会尝试检查5个可用沙拉中的3个。使用事务,您可以提供逻辑,检查以确保在提交之前剩余足够的沙拉来完成事务。如果检查失败,则可以回滚事务。这将阻止用户B查看比可用的沙拉更多的沙拉,即使显示可能表明在启动交易时有5个可用。