[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-jdbc-kakie-urovni-izolyatsii-tranzaktsiy-podderzhivayutsya-v-jdbc":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},1172,"kakie-urovni-izolyatsii-tranzaktsiy-podderzhivayutsya-v-jdbc",36,"jdbc","JDBC","🔌","Какие уровни изоляции транзакций поддерживаются в JDBC","Уровень изолированности транзакций — это значение, определяющее степень, при которой одна транзакция изолирована от изменений, произведённых другими параллельными транзакциями.\n\nБолее высокий уровень изолированности повышает точность данных, но может снижать количество параллельно выполняемых транзакций. Более низкий уровень позволяет выполнять больше параллельных транзакций, но снижает точность данных.\n\n### Аномалии при параллельных транзакциях\n\n- Грязное чтение (dirty read) — чтение данных, изменённых транзакцией, которая впоследствии откатится\n- Неповторяющееся чтение (non-repeatable read) — при повторном чтении ранее прочитанные данные оказываются изменёнными\n- Фантомное чтение (phantom reads) — при повторном чтении одна и та же выборка дает разные множества строк\n\n### Уровни изоляции\n\nУровни определены как константы интерфейса `java.sql.Connection`:\n\n| Уровень | Dirty Read | Non-Repeatable Read | Phantom Read |\n|---------|:----------:|:-------------------:|:------------:|\n| `TRANSACTION_READ_UNCOMMITTED` | Да | Да | Да |\n| `TRANSACTION_READ_COMMITTED` | Нет | Да | Да |\n| `TRANSACTION_REPEATABLE_READ` | Нет | Нет | Да |\n| `TRANSACTION_SERIALIZABLE` | Нет | Нет | Нет |\n\nТакже существует `TRANSACTION_NONE` — драйвер не поддерживает транзакции.\n\nУровень изоляции можно задать методом `setTransactionIsolation()` и получить через `getTransactionIsolation()` объекта `Connection`.\n\nНе все СУБД поддерживают все уровни изоляции. Информацию о поддерживаемых уровнях можно получить через `java.sql.DatabaseMetaData`.\n\n> **На собеседовании:** нарисуйте или расскажите таблицу: какой уровень какие аномалии допускает. Самый частый вопрос — разница между READ_COMMITTED и REPEATABLE_READ. По умолчанию большинство СУБД используют READ_COMMITTED (PostgreSQL, Oracle) или REPEATABLE_READ (MySQL InnoDB).","","middle",[15,7,16,17],"databases","transaction","sql",[],null,{"title":21,"description":22,"ogTitle":21,"ogDescription":23,"keywords":24,"schemaAnswer":32,"featuredSnippetReady":33},"Уровни изоляции транзакций в JDBC -- Gymterview","Уровни изоляции транзакций JDBC: READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE. Аномалии: dirty read, non-repeatable read, phantom read.","Четыре уровня изоляции в JDBC: какие аномалии допускает каждый. Таблица сравнения и методы установки.",[25,26,27,28,29,8,30,31],"уровни изоляции","TRANSACTION_READ_COMMITTED","TRANSACTION_SERIALIZABLE","dirty read","phantom read","Java","собеседование","JDBC поддерживает 5 уровней изоляции (константы Connection): TRANSACTION_NONE, READ_UNCOMMITTED (допускает все аномалии), READ_COMMITTED (защищает от dirty read), REPEATABLE_READ (защищает от dirty и non-repeatable read), SERIALIZABLE (защищает от всех аномалий). Устанавливается через setTransactionIsolation().",true]