После авторизации Вы получите доступ к файлам, скрытым материалам сайта, исходным кодам
возможность комментировать и т.д.

Вы можете авторизоваться на сайте всего одним кликом:

2016-07-08
SQL → Транзакции в базе данных
Что такое транзакции, Как делать транзакции, Как отменить транзакцию

Иногда требуется выполнить серию SQL-запросов таким образом, чтобы мно­ жество команд сработало одновременно. Это возможно благодаря транзакциям...

Что такое транзакция?

Представим, что в базе данных вашего сайта (пусть это будет магазин) находится две таблицы: в одной представлен список товаров, выставленных на продажу, и их количество, а в дру­ гой — заказы, сделанные посетителями сайта. После того как посетитель оформит заказ, необходимо обновить данные о наличии товара и пометить товары, помещен­ ные в корзину, как заказанные. Если одна из этих операций выполнится раньше другой, вы рискуете попасть в ситуацию, когда остальные посетители, просматривая информацию на вашем сайте, столкнутся с противоречивой информацией. Так, они могут увидеть, что из десяти якобы проданных виджетов, на самом деле заказано только девять.

Создание транзакции

Транзакции позволяют выполнять сложные операции, состоящие из множества запросов, которые вступают в действие одновременно. Чтобы инициировать тран­ закцию, достаточно отправить SQL-команду START TRANSACTION.

START TRANSACTION

После чего необходимо дописать нужный набор SQL-запросов и отправить команду COMMIT.

COMMIT

В ходе выполнения транзакции вы имеете возможность передумать и, решив, что отправляемую группу запросов выполнять не нужно, воспользоваться коман­ дой ROLLBACK.

ROLLBACK

Команда ROLLBACK особенно полезна при возникновении неполадок. Если пер­ вый запрос в транзакции прошел успешно, а второй выдал ошибку, то ROLLBACK позволит отменить результаты выполнения первого запроса и пересмотреть даль­ нейшие действия.

Встроенные методы PHP для работы с транзакциями

В PHP -скриптах объект PDO также предоставляет довольно удобные мето­ды работы с транзакциями: метод beginTransaction инициирует транзакцию, commit — ее применяет, a rollBack — отменяет.

try
{
   $pdo->beginTransaction();
   //выполняем последовательность запросов...
   $pdo->commit();
}
catch (PDOException $е)
{
   $pdo->rollBack();
   $error = "Ошибка при выполнении транзакции.";
   include 'error.php ';
exit ();
}

ТРАНЗАКЦИИ ТРЕБУЮТ ФОРМАТ InnoDB

Одна из причин, по которой большинство таблиц создается в формате InnoDB (engine=InnoDB), — поддержка транзакций. Более старый формат MylSAM транзакции не поддерживает.

511
0
Пожалуйста, авторизируйтесь, чтобы скачать архив с файлами урока