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 つあることがわかります。
ありがとう