Московский государственный университет имени М.В.Ломоносова
Опубликован: 05.01.2004 | Доступ: свободный | Студентов: 9011 / 1069 | Оценка: 4.04 / 3.84 | Длительность: 10:03:00
ISBN: 978-5-94774-539-9
Лекция 7:

Транзакции в базах данных

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Аннотация: В лекции обсуждаются вопросы использования различных уровней изоляции и применение транзакций.
Ключевые слова: транзакция, интервал, операторы, фиксация транзакции, автокоммит, ROLLBACK WORK, откат, autocommit, неповторяющееся чтение (non-repeatable read);, грязное чтение (dirty read), потерянное обновление (lost update), фантомная вставка (phantom insert), SQL/92, уровень изоляции, SERIALIZABLE - последовательное выполнение, REPEATABLE READ - повторяющееся чтение, фантомная вставка, READ COMMITTED - фиксированное чтение, неповторяемое чтение, dirty read, потерянное обновление, lost update, phantom insert, serializability, READ COMMITTED, блокировка, оптимистическая блокировка, стандарт SQL/92, пессимистическая блокировка, приостановка выполнения, разделяемая блокировка (S-locks), исключительная блокировка, блокировка на уровне таблицы, блокировка на уровне строк, блокировка на уровне элемента таблицы, блокировка на уровне БД, блокировка на уровне табличного пространства, блокировка на уровне страницы или блока, определение, запись, доступ

Транзакции

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

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

Фиксация транзакции может производиться принудительно по SQL-оператору или неявно после завершения каждого SQL-оператора. Во втором случае применяется режим автокоммита. Как правило, выполнение SQL-операторов в интерактивном режиме всегда использует автокоммит. Очень часто в интегрированных средах разработки классы, инкапсулирующие работу с базой данных, по умолчанию предполагают режим автокоммита.

Следующая схема демонстрирует принцип использования транзакций.

Принцип использования транзакций

Принцип использования транзакций

Новая транзакция начинается с начала каждого сеанса работы с базой данных. Далее все выполняемые SQL-операторы будут входить в одну транзакцию до тех пор, пока не будет выполнен оператор COMMIT WORK или ROLLBACK WORK.

Оператор COMMIT WORK завершает текущую транзакцию, выполняя фиксацию сделанных изменений в базе данных. Иногда говорят, что оператор COMMIT WORK фиксирует транзакцию.

Оператор ROLLBACK WORK выполняет откат транзакции, отменяя действие всех SQL-операторов, выполненных в текущей транзакции.

Логически транзакция должна объединять только выполнение взаимосвязанных операций. Так, если делать транзакции "очень большими", состоящими из последовательности не связанных между собой операторов, то любой сбой, автоматически выполняющий откат транзакции, повлияет на отмену действий, которые могли бы быть успешно завершены при более "коротких" транзакциях.

Автоматическая фиксация изменений

Большинство коммерческих СУБД позволяет устанавливать режим автоматической фиксации изменений - автокоммит .

Для установки этого режима используется (но не всеми СУБД) оператор SET AUTOCOMMIT ON;, а для отмены режима - SET AUTOCOMMIT OFF;.

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Сергей Пантелеев
Сергей Пантелеев
Россия, Москва
Евгений Сеничак
Евгений Сеничак
Россия, Братск