API поддержка транзакций

Поддержка транзакций в СУБД MySQL зависит от используемого движка хранилища данных. Начиная с MySQL 5.5, по умолчанию используется движок InnoDB. InnoDB полностью поддерживает ACID модель транзакций.

Транзакциями можно управлять как средствами SQL, так и вызовами API функций. Для включения и выключения режима автофиксации изменений рекомендуется пользоваться API функциями.

Пример #1 Установка режима автофиксации средствами SQL и функциями API

<?php
$mysqli 
= new mysqli("example.com""user""password""database");
if (
$mysqli->connect_errno) {
    echo 
"Не удалось подключиться к MySQL: (" $mysqli->connect_errno ") " $mysqli->connect_error;
}

/* Рекомендуется управлять настройками транзакций средствами API */
$mysqli->autocommit(false);

/* Не будет распознаваться и учитываться плагинами репликации и балансировки нагрузки */
if (!$mysqli->query('SET AUTOCOMMIT = 0')) {
    echo 
"Не удалось выполнить запрос: (" $mysqli->errno ") " $mysqli->error;
}
?>

Дополнительные службы сервера, такие как плагины репликации и балансировки нагрузки, могут отслеживать вызовы API функций. Плагин репликации может сообщать балансировщику нагрузки о запущенной транзакции, если эта транзакция обслуживается API функциями. Сервер не сможет распределять нагрузку между репликами базы, если смена режима автофиксации, фиксация и откат транзакций осуществляются SQL запросами.

Пример #2 Фиксация и откат

<?php
$mysqli 
= new mysqli("example.com""user""password""database");
$mysqli->autocommit(false);

$mysqli->query("INSERT INTO test(id) VALUES (1)");
$mysqli->rollback();

$mysqli->query("INSERT INTO test(id) VALUES (2)");
$mysqli->commit();
?>

Следует заметить, что сервер MySQL не может откатить результаты всех запросов. Некоторые изменения фиксируются неявно.

См. также

Коментарии

404 Not Found

404 Not Found


nginx

    Поддержать сайт на родительском проекте КГБ