Какие SQL-операторы или методы используются для работы с транзакциями?

«Какие SQL-операторы или методы используются для работы с транзакциями?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для управления транзакциями в SQL и при работе с базами данных из PHP используются следующие ключевые операторы и методы:

1. SQL-операторы:

  • BEGIN или START TRANSACTION — начинает новую транзакцию.
  • COMMIT — фиксирует все изменения, сделанные в текущей транзакции.
  • ROLLBACK — отменяет все изменения текущей транзакции.
  • SAVEPOINT identifier — создает точку сохранения внутри транзакции, к которой можно откатиться.
  • ROLLBACK TO SAVEPOINT identifier — откатывает транзакцию к указанной точке сохранения.

2. Методы в PHP (PDO):

$pdo = new PDO($dsn, $user, $pass);

$pdo->beginTransaction(); // Начало транзакции
try {
    // Выполняем несколько запросов
    $stmt1 = $pdo->prepare("UPDATE accounts SET balance = balance - ? WHERE id = ?");
    $stmt1->execute([100.00, 1]);

    $stmt2 = $pdo->prepare("UPDATE accounts SET balance = balance + ? WHERE id = ?");
    $stmt2->execute([100.00, 2]);

    $pdo->commit(); // Фиксация, если все успешно
    echo "Транзакция завершена.";
} catch (Exception $e) {
    $pdo->rollBack(); // Откат при любой ошибке
    echo "Транзакция откачена: " . $e->getMessage();
}

3. Методы в PHP (MySQLi):

$mysqli->begin_transaction(); // или $mysqli->autocommit(FALSE);
try {
    $mysqli->query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    $mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
    $mysqli->commit();
} catch (Exception $e) {
    $mysqli->rollback();
}

Транзакции обеспечивают ACID-свойства, главное из которых — атомарность: либо выполняются все операции в блоке, либо ни одна.