Язык SQL

Помещения операторов insert и update


Результат помещения операторов insert и update в транзакцию можно наблюдать, запустив Java-прогрэмму, например dbjava.samples. ProcessPayStatements, которая подключается к базе данных Access. Попытайтесь применить Java-отладчик, чтобы остановить программу во время выполнения транзакции. Если вы откроете ту же базу данных в Access, вы не увидите вообще никаких изменений в таблицах во время транзакции. Таблицы можно открыть, но сервер базы данных будет блокировать всякую попытку изменить какую-либо таблицу. После операции фиксации вы сможете увидеть изменения, открывая таблицы в Access. Можно, однако, наблюдать некоторое аномальное поведение при использовании Microsoft Access.

Пакет JDBC также осуществляет управление параллельным выполнением транзакций посредством метода setlsolationLevel. Существует пять уровней изоляции (isolation levels). Самый нижний уровень не имеет средств поддержки транзакций и, как следствие, не производит проверку на наличие конфликтов между параллельными процессами. Ограничения, налагаемые на взаимодействия между транзакциями, возрастают при переходе на более высокие уровни. Самый высокий уровень поддерживает отсутствие взаимодействий между транзакциями. Обычно чем выше уровень изоляции, тем медленнее выполнение транзакции. Уровни изоляции транзакций в пакете JDBC следующие.

1. TRANSACTION_NONE. Поддержка транзакций полностью отсутствует.

2. TRANSACTION_READ_UNCOMMITED. Может происходить чтение мусора, неповторяемое чтение, а также чтение несуществующих объектов (фантомное чтение).

3. TRANSACTION_READ_COMMITED. Чтение мусора предотвращается, но неповторяемое и фантомное чтение может иметь место.

4. TRANSACTION_REPEATABLE_READ. Предотвращается чтение мусора и неповторяемое чтение, но фантомное чтение может иметь место.

5. TRANSACTION_SERIALIZABLE. Предотвращается чтение мусора, неповторяемое и фантомное чтение.

При создании нового подключения уровень его изоляции зависит от драйвера, который обычно устанавливает значение по умолчанию для базы данных. Чтобы изменить уровень изоляции для транзакции, необходимо вызвать метод setlsolationLevel перед выполнением первого оператора транзакции. Уровень изоляции следует повторно установить после фиксации транзакции или ее отмены.

Комментарии закрыты