Эти ситуации управляются с помощью транзакций базы данных .
Классический пример - когда я хочу перевести деньги со своего счета на другой счет. Необходимо выполнить два запроса:
- Снимите деньги с моего счета
- Положите деньги на другой счет
Конечно, если второй запрос не удался, я хочу откатить первый и уведомить пользователя об ошибке. Для этого и нужны транзакции.
Если вы не используете транзакции, когда второй запрос не выполняется, первый выполняется в любом случае и не откатывается (поэтому деньги исчезают). Это поведение по умолчанию MySQL.