Транзакции ODBC

Транзакция — это единица работы, которая выполняется как единая атомарная операция, то есть операция завершается успешно или завершается сбоем в целом. Например, рассмотрите возможность передачи денег из одного банковского счета в другой. Это включает в себя два шага: вывод денег из первой учетной записи и депозит его во втором. Важно, чтобы оба шага были успешными; Это недопустимо для одного шага успешного выполнения, а другое — сбоем. База данных, поддерживающая транзакции, может гарантировать это.

Транзакции могут быть завершены путем фиксации или отката. При фиксации транзакции изменения, внесенные в этой транзакции, становятся постоянными. При откате транзакции затронутые строки возвращаются в состояние, в которое они находились до запуска транзакции. Чтобы расширить пример передачи учетной записи, приложение выполняет одну инструкцию SQL для дебет первой учетной записи и другой инструкции SQL для кредита второй учетной записи. Если оба оператора успешно выполнены, приложение фиксирует транзакцию. Но если любая инструкция завершается ошибкой по какой-либо причине, приложение откатывает транзакцию. В любом случае приложение гарантирует согласованное состояние в конце транзакции.

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

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

При увеличении изоляции транзакций происходит снижение параллелизма или возможность двух транзакций одновременно использовать одни и те же данные. Дополнительные сведения см. в разделе "Настройка уровня изоляции транзакций".

Этот раздел содержит следующие подразделы.