在 MySQL 中获取更新的值,而不是受影响的行

2022-08-30 17:46:39

我一直试图找到这个问题的答案,但在我所有的研究中都没有找到任何明确的“是”或“否”。

我正在运行一个简单的MySQL查询,如下所示:

 UPDATE item SET `score`=`score`+1 WHERE `id`=1

有没有办法让该查询返回更新的值,而不是受影响的行数?作为参考,我在PHP中执行此操作,因此实际代码如下所示:

 $sql = "UPDATE item SET `score`=`score`+1 WHERE `id`=1";
 $new_value = mysql_query($sql); 
 //Unfortunately this does not return the new value

我知道我可以做第二个查询,只是选择值,但我试图尽可能地减少查询。有没有办法?


答案 1

可以使用更新的存储过程执行此操作,然后在输出参数中选择新值。下面返回一列具有新值。new_score

DELIMITER $$   -- Change DELIMITER in order to use ; withn the procedure
CREATE PROCEDURE increment_score
(
   IN id_in INT
)
BEGIN
    UPDATE item SET score = score + 1 WHERE id = id_in;
    SELECT score AS new_score FROM item WHERE id = id_in;
END
$$            -- Finish CREATE PROCEDURE statement
DELIMITER ;   -- Reset DELIMITER to standard ;

在 PHP 中:

$result = mysql_query("CALL increment_score($id)");
$row = mysql_fetch_array($result);
echo $row['new_score'];

答案 2

不,没有什么比postgresql的UPDATE更好的了...在MySQL中返回output_expression(还有吗?


推荐