Процедура MySQL, возвращающая 1 затронутую строку, когда она ничего не обновляла

У меня есть следующая хранимая процедура в моей базе данных 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 не выполняется.

Обновление Мало того, что ничего не обновляется, но если я полностью удалю оператор обновления, он все равно скажет мне, что была затронута одна строка!

Спасибо


person Luke    schedule 29.03.2013    source источник


Ответы (1)


В конце концов я решил проблему, объявив переменную OUT в моей хранимой процедуре, а затем вернув значение, установив его значение после оператора SELECT.

/* Return the affected rows */
SET affected_rows = ROW_COUNT();
person Luke    schedule 30.03.2013