Типы чтения и уровни изоляции транзакций

Для транзакций существует несколько типов чтения:

Грязное чтение(dirty reads) происходит, когда транзакциям разрешено видеть несохраненные изменения данных. Иными словами, изменения, сделанные в одной транзакции, видны вне ее до того, как она была сохранена. Если изменения не будут сохранены, то, вероятно, другие транзакции выполняли работу на основе некорректных данных;

Непроверяющееся чтение(nonrepeatable reads) происходит, когда транзакция А читает строку, транзакция Б изменяет эту строку, транзакция А читает ту же строку и получает обновленные данные;

Фантомное чтение(phantom reads) происходит, когда транзакция А считывает все строки, удовлетворяющие WHERE-условию, транзакция Б вставляет новую или удаляет одну из строк, которая удовлетворяет этому условию, транзакция А еще раз считывает все строки, удовлетворяющие WHERE-условию, уже вместе с новой строкой или недосчитавшись старой.
JDBC удовлетворяет четырем уровням изоляции транзакций, определенным в стандарте SQL:2003.
Уровни изоляции транзакций определены в виде констант интерфейса Connection(по возрастанию уровня ограничения):
TRANSACTION_NONE–информирует о том, что драйвер не поддерживает транзакции;
TRANSACTION_READ_UNCOMMITTED–позволяет транзакциям видеть несохраненные изменения данных, что разрешает грязное, непроверяющееся и фантомное чтения;
TRANSACTION_READ_COMMITTED–означает, что любое изменение, сделанное в транзакции, не видно вне неё, пока она не сохранена. Это предотвращает грязное чтение, но разрешает непроверяющееся и фантомное;
TRANSACTION_REPEATABLE_READ–запрещает грязное и непроверяющееся, но фантомное чтение разрешено;
TRANSACTION_SERIALIZABLE–определяет, что грязное, непроверяющееся и фантомное чтения запрещены.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s