Sobes.tech
Назад к вопросам
Intern
3

В веб-сервисе нужно записать заказ и списать остаток со склада так, чтобы либо сохранились обе операции, либо ни одна. Какие SQL-команды используются для обрамления набора запросов, и как действовать при ошибке до фиксации?

Компании, где спрашивали
AvitoAvito

Ответ от нейросети

sobes.tech AI

Для обеспечения атомарности операций записи заказа и списания остатка со склада в SQL используют транзакции. Основные команды для обрамления набора запросов:

  • BEGIN или START TRANSACTION — начинает транзакцию.
  • Выполнение необходимых запросов (например, INSERT заказа и UPDATE склада).
  • COMMIT — фиксирует изменения, если все операции прошли успешно.
  • ROLLBACK — отменяет все изменения в транзакции при возникновении ошибки до фиксации.

Пример на SQL:

BEGIN;
INSERT INTO orders (...) VALUES (...);
UPDATE stock SET quantity = quantity - ? WHERE product_id = ?;
-- если ошибок нет
COMMIT;
-- если ошибка
ROLLBACK;

В коде при обнаружении ошибки до вызова COMMIT нужно вызвать ROLLBACK, чтобы откатить все изменения и сохранить целостность данных.