Sobes.tech
Intern

Σε μια υπηρεσία web, πρέπει να καταχωρίσετε μια παραγγελία και να αφαιρέσετε το υπόλοιπο από το απόθεμα έτσι ώστε είτε και οι δύο ενέργειες να διατηρούνται είτε καμία. Ποια εντολή SQL χρησιμοποιείται για το περικλείσιμο ενός συνόλου ερωτημάτων και πώς ενεργούμε σε περίπτωση σφάλματος πριν από την επιβεβαίωση;

sobes.tech AI

Απάντηση από 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, чтобы откатить все изменения и сохранить целостность данных.