Пример ответа
1) Короткий ответ
Транзакция — это последовательность операций с базой данных, которая выполняется как единое целое: либо все операции успешно применяются, либо ни одна из них.
3) Ключевые идеи (ACID)
Atomicity (Атомарность) — Все операции в транзакции выполняются вместе или откатываются полностью при ошибке.
Consistency (Согласованность) — Транзакция переводит базу из одного валидного состояния в другое, сохраняя целостность данных.
Isolation (Изолированность) — Параллельные транзакции не влияют друг на друга.
Durability (Долговечность) — После подтверждения (commit) изменения сохраняются даже при сбое системы.
5) Пример кода (Laravel)
php
Copy
Download
DB::transaction(function () {
$user = User::create(['email' => 'john@example.com']);
// Если это удаление не выполнится, то и создание пользователя откатится
User::where('invalid', true)->delete();
});
// Или ручное управление
DB::beginTransaction();
try {
$order = Order::create(['total' => 100]);
$order->items()->create(['product_id' => 1]);
DB::commit(); // Подтверждаем изменения
} catch (Exception $e) {
DB::rollBack(); // Откатываем всё при ошибке
throw $e;
}
6) Follow-up вопросы
Какие уровни изоляции вы знаете? → Read committed, Repeatable read.
Когда транзакция не нужна? → Одиночные SELECT-запросы.
7) Практический совет
В своем проекте найдите операцию, которая изменяет несколько связанных таблиц (например, создание заказа), и оберните её в транзакцию.
Протестируйте откат транзакции: добавьте искусственную ошибку (например,
throw new Exception
) после нескольких изменений и убедитесь, что данные не сохранились.