транзакция выполняется частично

господа, прошу объяснить элементарное

## mysql, innoDB

START TRANSACTION;
UPDATE `users` SET `bill`=(`bill`-4500) WHERE `id`='7';
UPDATE `users` SET `bill`=(`bill`+4500) WHERE `id`='5';
COMMIT;

Изучаю транзакции. Пытаюсь с одного пользователя списать деньги, а другому записать. Данная конструкция работает, но, ест-но охота проверить, что если ошибка? Удаляю пользователя 7. Транзакция Все равно записывает деньги пользователю 5. Если же дописать пользователю 7 в UPDATE условие

... WHERE `id`='7' AND `bill`>='4500';

первый запрос - не происходит ничего, второй ест-но выполняется

собственно, подскажите, как изменить запрос, что бы при второй запрос выполнялся только если выполнен первый?


Ответы (1 шт):

Автор решения: Anton Shchyrov

А первый запрос у вас выполняется. Другой вопрос, что он обновляет 0 записей. Чтобы узнать число записей, затронутых предыдущим запросом есть функция ROW_COUNT()

По идее, вот так будет работать

UPDATE `users` SET
  `bill`= `bill` + 4500
WHERE
  `id`='5' AND
  ROW_COUNT() > 0;
→ Ссылка