MySQL过程返回1个受影响的行,当它没有更新任何内容时

时间:2013-03-29 17:10:05

标签: mysql stored-procedures rows-affected

我在mysql数据库中有以下存储过程:

BEGIN 
DECLARE useCount, remainingUses INT DEFAULT 0;

/* Get the current values for the quiz into the variables */
SELECT remaining_uses, use_count INTO remainingUses, useCount FROM quiz_passwords WHERE password_id  = passwordId;

/* Are there remaining uses to consume? */
if (remainingUses > 0) THEN

    UPDATE quiz_passwords SET use_count = (useCount + 1), remaining_uses = (remainingUses - 1) where password_id = passwordId;

END IF;

END

如您所见,只有在初始remainingUses语句中的select变量大于'0'时才应执行update语句。

但是,当我调用过程CALL UsePassword(197);时,它会返回Affected rows: 1

我不明白,当我在数据库中使用id = 197的密码行的值为'remaining_uses = 0'时。

是否有理由在结果中显示Affected rows: 1

如果语句成功执行,它会返回1个受影响的行吗?因为在本例中技术上我的UPDATE语句没有被执行。

更新不仅没有更新,而且如果我完全删除更新语句,它仍然会告诉我有一个受影响的行!

由于

1 个答案:

答案 0 :(得分:2)

最后,我通过在存储过程中声明一个OUT变量然后通过在SELECT语句之后设置它的值来返回值来解决问题。

/* Return the affected rows */
SET affected_rows = ROW_COUNT();