✅ Успіх → усі зміни зберігаються
❌ Помилка → усі зміни скасовуються
Тобто база даних ніколи не залишається в напівзламаному стані.
Розбір твого коду по рядках
$db->query("START TRANSACTION");🔹 Початок транзакціїЗ цього моменту всі SQL-запити виконуються тимчасово, поки не буде COMMIT.
try {
// UPDATE questions
// INSERT / DELETE tags🔹 Тут ви виконуєте кілька взаємопов’язаних дій, наприклад: UPDATE, INSERT, DELETE...$db->query("COMMIT");🔹 Підтвердження транзакції👉 Усі зміни стають постійними.
} catch (Throwable $e) {
$db->query("ROLLBACK");🔹 Якщо будь-яка помилка (SQL, PHP, логіка):усі зміни відкочуються
база повертається до стану до START TRANSACTION
exit(json_encode(['ErrorMessage' => 'Помилка збереження.']));
}🔹 Користувач отримує одне зрозуміле повідомлення, а не зламані дані.Використовуйте ЗАВЖДИ, якщо:
✅ 1. Кілька SQL-запитів залежать один від одного
✅ 2. Дані мають бути логічно узгодженими
✅ 3. Адмін-панель / масові операції
Можна обійтися без транзакції, якщо:
❌ один простий INSERT
❌ немає залежних таблиць
❌ помилка не ламає логіку