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

135
23 апреля 2022, 11:40

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

## 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';

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

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

Answer 1

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

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

UPDATE `users` SET
  `bill`= `bill` + 4500
WHERE
  `id`='5' AND
  ROW_COUNT() > 0;
READ ALSO
Как увязать два запроса в БД

Как увязать два запроса в БД

подскажите пожалуйста как в коде прописать два запроса в БД Таблица, пользователи и таблица платеж, в отдельности запросы работают, а вместе...

185
Не выбираются уникальные записи

Не выбираются уникальные записи

Имеется следующая таблица:

95
Проблема с подключением БД

Проблема с подключением БД

Ненавижу БД и всё, что с ними связано, но работать как то надоПытаюсь подключить БД, выдаёт ошибку

148