Замечание о свойствах АСИД
Свойства АСИД транзакций, за исключением атомарности, не всегда выполняются в полном объеме.
· Согласованность. Нарушается внутри транзакции. При неполной изоляции транзакций несогласованные данные могут быть доступны другим транзакциям.
· Изоляция. Полной изоляции транзакций можно достигнуть, только если принудительно выстраивать транзакции в очередь и исполнять их строго одну после другой. При этом достаточно одной из транзакций зависнуть или выполняться слишком долго (сначала я пила кофе, потом меня вызвал начальник, а потом был перерыв), чтобы остановить всю работу. Поэтому вводится несколько уровней неполной изоляции.
· Долговечность. Может нарушаться если, например, транзакция , вызванная из транзакции будет завершена успешно, a откатится. Тогда откатятся данные транзакции
Транзакция— это операция, состоящая из одного или нескольких запросов к базе данных. Суть транзакций — обеспечить корректное выполнение всех запросов в рамках одной транзакции, а так-же обеспечить механизм изоляции транзакций друг от друга для решения проблемы совместного доступа к данным.
Любая транзакция либо выполняется полностью, либо не выполняется вообще.
В транзакционной модели есть два фундаментальных понятия: COMMIT и ROLLBACK.
COMMIT означает фиксацию всех изменений в транзакции.
ROLLBACK означает отмену (откат) изменений, произошедших в транзакции.
При старте транзакции все последующие изменения сохраняются во временном хранилище. В случае выполнения COMMIT, все изменения, выполненные в рамках одной транзакции, сохранятся в физическую БД. В случае выполнения ROLLBACK произойдет откат и все изменения, выполненные в рамках этой транзакции, не сохранятся.
В MySQL транзакции поддерживаются только таблицами innoDB. Таблицы MyISAM транзакции не поддерживают. В innoDB по умолчанию включен autocommit, это значит, что по умолчанию каждый запрос эквивалентен одной транзакции.
Транзакция начинается со специального запроса «START TRANSACTION», либо «BEGIN». Чтобы закончить транзакцию, нужно либо зафиксировать изменения (запрос COMMIT), либо откатить их (запрос ROLLBACK).
Пример с COMMIT:
set autocommit=0; //отключаем autocommit
Start transaction; (также, можно написать BEGIN; )
…какие-то действий с БД (insert, update,delete…)
Дата добавления: 2017-10-09; просмотров: 400;