Назад к вопросам
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();
}