У меня есть следующая хранимая процедура в моей базе данных 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».
Есть ли причина, по которой if будет показывать Affected rows: 1
в результате?
Это то, что если оператор выполняется успешно, он возвращает 1 затронутую строку? Потому что технически в этом примере мой оператор UPDATE не выполняется.
Обновление Мало того, что ничего не обновляется, но если я полностью удалю оператор обновления, он все равно скажет мне, что была затронута одна строка!
Спасибо