Ответ
Для управления транзакциями в 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-свойства, главное из которых — атомарность: либо выполняются все операции в блоке, либо ни одна.