Как работает приостановка транзакции в MySQL?
В руководстве Spring Framework говорится, что для PROPAGATION_REQUIRES_NEW текущая транзакция будет приостановлена.
Что значит "приостановленная транзакция"? Таймер для тайм-аута перестает рассчитывать на текущую транзакцию? Каковы реальные последствия такой приостановки?
Спасибо,
Асаф
1 ответ
Это не означает ничего особенного, приостановленная транзакция - это просто транзакция, которая временно не используется для вставок, обновлений, фиксации или отката, потому что новая транзакция должна быть создана из-за указанных свойств распространения, и только одна транзакция может быть активной в то же время.
В основном есть две модели транзакций: вложенная и плоская. Во вложенной модели, если вы запускаете транзакцию и вам нужна другая, первая остается активной, то есть вторая будет вложена в родительский объект и т. Д. С другой стороны, в плоской модели первая транзакция будет приостановлена, то есть мы не будем использовать ее, пока новая не будет завершена.
AFAIK плоская модель используется почти исключительно (включая Spring и спецификацию EJB), поскольку ее гораздо проще реализовать: в каждый момент времени существует только одна активная транзакция, поэтому легко решить, что делать в случае отката скажем, из-за исключения. Что еще более важно, базовая база данных должна поддерживать ее, если вам нужна вложенная модель, поэтому плоская модель является просто общим знаменателем в этом случае.