reboot777
@reboot777
нищий студент

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы