我听说很多应用程序开发人员在数据库处理的竞争条件方面遇到了一些麻烦.一个典型的例子是这样的:
在此示例中,numStock字段应该变为1,但由于用户之间的竞争而将其设置为2.
所以当然可以使用锁,但我想到了另一种处理方法 - 将所有行详细信息作为WHERE标准传递.让我解释...
在上面的示例中,SQL代码可能如下所示:
//选择
SELECT itemID, numStock FROM items WHERE itemID = 45
Run Code Online (Sandbox Code Playgroud)
//更新
UPDATE items SET numStock = 2 WHERE itemID = 45
Run Code Online (Sandbox Code Playgroud)
我想解决这个问题的想法:
//选择
SELECT itemID, numStock FROM items WHERE itemID = 45
Run Code Online (Sandbox Code Playgroud)
//更新
UPDATE items SET numStock = 2 WHERE itemID = 45 AND numStock = 3
Run Code Online (Sandbox Code Playgroud)
因此,查询检查数据是否因为选择了数据而发生了变化.所以我的问题是:(1)这[总是]会起作用吗?(2)与数据库锁定机制(例如,MySQL事务)相比,这是一个更好的选择吗?
谢谢你的时间.
我有两个事务T和U,它们在DB中同时执行.如何提供丢失更新问题的示例?
我们可以假设我们有三个帐户A,B,C,它们分别有100英镑,200英镑和300英镑.