Назад к вопросам
Junior
132
questionbank
Что такое транзакция в контексте работы с базами данных?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Транзакция — это логическая единица работы с базой данных, которая состоит из одного или нескольких операторов SQL. Она либо полностью выполняется (коммитится), либо полностью отменяется (откатывается), если в процессе выполнения возникла ошибка или возникла команда отмены.
Основные свойства транзакций (ACID):
- Atomicity (Атомарность): Все операции в транзакции выполняются как единое целое. Если хоть одна операция не удалась, вся транзакция откатывается.
- Consistency (Согласованность): Транзакция переводит базу данных из одного согласованного состояния в другое.
- Isolation (Изолированность): Транзакции изолированы друг от друга. Изменения, произведенные одной транзакцией, не видны другим транзакциям до ее коммита.
- Durability (Надежность): Изменения, внесенные после успешного коммита транзакции, сохраняются и не будут потеряны, даже в случае сбоя системы.
Пример транзакции на PHP с использованием PDO:
<?php
// подключение к БД
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$pdo->beginTransaction(); // Начало транзакции
$stmt1 = $pdo->prepare("UPDATE accounts SET balance = balance - 100 WHERE id = ?");
$stmt1->execute([1]); // Снятие средств с первого счета
$stmt2 = $pdo->prepare("UPDATE accounts SET balance = balance + 100 WHERE id = ?");
$stmt2->execute([2]); // Пополнение второго счета
$pdo->commit(); // Если все прошло успешно, коммитим изменения
echo "Транзакция успешно завершена.";
} catch (Exception $e) {
$pdo->rollBack(); // Если возникла ошибка, откатываем все изменения
echo "Ошибка транзакции: " . $e->getMessage();
}