0

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」より大きい場合にのみ実行する必要があります。

ただし、プロシージャを呼び出すと、CALL UsePassword(197);が返されますAffected rows: 1

id = 197データベース内のパスワード行の値が「remaining_uses = 0」の場合、理解できません。

結果に表示される場合、理由はありAffected rows: 1ますか?

ステートメントが正常に実行された場合、影響を受ける1行が返されるということですか? 技術的には、この例では UPDATE ステートメントが実行されていないためです。

更新何も更新されないだけでなく、更新ステートメントを完全に削除しても、影響を受ける行が 1 つあることがわかります。

ありがとう

4

1 に答える 1