我的表中有一个名为status的列(让我们称它为A),我会根据用户操作更新它。列A将状态保存为整数。然而,我有一个条件,如果任何用户已经确认了值,那么我需要阻止更新表,而是向用户报告一个错误,说“这个值已经被确认了”。当前在我的PHP代码中,为了防止多个用户更新值,我从表中读取(步骤1) A的值,并且只有当该值不是2时,我才立即向表中写入更新值(步骤2)。"This value has already been confirmed";然而,我关心的是,如果在第一个请求尚未执行步骤
$prodqty = mysql_query("SELECT quan FROM pro_list WHERE auto_id = $pid"); //get the current product quantityif (mysql_num_rows($prodqty) != 0) $row = mysql_fetch_array($prodqty);}
$nqty = $productqty-pro_
我目前正在nodejs的一个项目中工作,该项目有一个到Mysql DB的池连接(同时打开了大约10个连接)。现在,我希望能够使用连接来更新数据库中的表,如下所示: update table set tries=tries+1 where condition=value; 我的问题是,在这种方法的所有连接之间,不可能出现竞争条件?因为我在互联网上查找,发现我的SQL中的“事务”将导致多个数据库连接之间的竞争条件。 谢谢
我遇到了竞争情况,因为我正在处理大量的并发。我正在尝试将这两个mysql语句组合在一起,以便同时执行。UPDATE filenames SET pending=2 WHERE id_file=**id of select query**;
我遇到的竞争条件的另一个解决方案是执行UPDATE查询where pending=1,并以某种方式获得更新行的ID,但我不确定这是否可能?
我知道它们可以用来完全回滚更新列表(例如,在一个账户上扣钱,然后添加到另一个账户),但这就是它们所做的全部吗?具体地说,它们可以用来防止竞争条件吗?// Note added in 2016: this line is actually not needed(我知道这可能会被写成一个更新查询,但情况并不总是如此)
这段代码是否受到竞争条件的保护?我最感兴趣的是MySQL5 + InnoDB