Задать вопрос
reboot777
@reboot777
нищий студент

При каких случаях необходимо прописывать транзакции в базе данных?

Интересует, при каких случаях транзакции в базе данных обязательны? Если можно, примеры пожалуйста.
  • Вопрос задан
  • 161 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
@rPman
Транзакция - это возможность объединить несколько ваших запросов в один, в пределах которых возможен откат состояния базы до ее начала, причем исключительно в пределах записываемых данных.

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

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

Еще есть момент, если вы изменили базу в пределах транзакции и до ее завершения делаете запрос, включающий эти данные - то если такой запрос сделать вне транзакции (соседняя сессия например) то ваших измененных данных он не увидит, а внутри транзакции - увидит.

Не всегда имеет смысл городить транзакции (они дорогие с точки зрения затрат ресурсов БД), иногда достаточно блокировок, т.е. перед началом записи вы блокируете доступ ко всей таблице (это можно делать в не транзакционной базе) или даже к отдельным полям, и другие сессии, при попытке прочитать/изменить их будут приостановлены до разблокировки.

Сама связность данных конечно подразумевает что нужен контроль целостности но оно не обязательно, вы можете заложить в коде возможность неполного заполнения данных об объекте и следить за порядком изменения этих данных. Например вы сначала добавляете запись в таблицу 'родители', с количеством детей 0, затем добавляете в таблицу 'дети' запись об их детях, т.е. вместо одной транзакции у вас независимые две, в любой момент структура верна но между записями информация о детях родителей неверная (родители есть а детей нет), это очень короткий момент и он точно не актуален если у вас всего один пользователь, пока он меняет информацию, никто другой не будет читать эти неверные данные.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Всегда нужно использовать транзакции
Ответ написан
mad_maximus
@mad_maximus
1. Если идет вставка в 2 или более таблиц одновременно.
2. Если идет выборка и потом вставка в зависимости от условий.
3. При любых операциях, сложнее одного селекта, одного инсерта или одного апдейта.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы