gpt4 book ai didi

数据库竞争条件

转载 作者:太空狗 更新时间:2023-10-30 01:55:07 26 4
gpt4 key购买 nike

我听说许多应用程序开发人员在数据库处理中的竞争条件方面遇到了一些麻烦。一个典型的例子是这样的:

  • 用户 1 选择一个字段,比如 numStock,它是 3
  • 用户2也选择了numStock,还是3
  • 用户 1 递减 numStock(在应用程序中),并在数据库中将其设置为 2。
  • 用户 2 也递减 numStock(在应用程序中),并在数据库中将其设置为 2。

在此示例中,numStock 字段本应变为 1,但由于用户之间的竞争,它被设置为 2。

当然可以使用锁,但我想到了另一种处理方法 - 将所有行详细信息作为 WHERE 条件传递。让我解释一下……

在上面的示例中,SQL 代码可能如下所示:

//选择

SELECT itemID, numStock FROM items WHERE itemID = 45

//更新

UPDATE items SET numStock = 2 WHERE itemID = 45

我解决比赛的想法:

//选择

SELECT itemID, numStock FROM items WHERE itemID = 45

//更新

UPDATE items SET numStock = 2 WHERE itemID = 45 AND numStock = 3

因此,查询会检查自从它对数据进行 SELECT 后数据是否发生了变化。 所以我的问题是: (1) 这[总是]有效吗? (2) 与数据库锁定机制(例如 MySQL 事务)相比,这是更好的选择吗?

感谢您的宝贵时间。

最佳答案

这种策略行之有效,被称为“乐观锁定”。那是因为您假设它会成功进行处理,并且只有在最后才实际检查它是否成功。

当然,您需要一种重试交易的方法。如果失败的可能性非常高,它可能会变得低效。但在大多数情况下,它工作得很好。

关于数据库竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9850336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com