Когда мне следует использовать транзакции в моих запросах? - PullRequest
27 голосов
/ 29 января 2010

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

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

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

У меня сложилось впечатление, что я не знаю случаев, когда данные могут быть частично потеряны (кроме ошибок кодера), поэтому я всегда беспокоюсь о том, когда мне следует их использовать.

Может кто-нибудь объяснить или дать какую-то связь с этими фундаментальными правилами?

Я использую MySQL 5.0.8. Должен ли я использовать InnoDB для всех таблиц, для которых нужны транзакции? Если да, то InnoDB медленнее, чем обычный MyISAM, но мне не стоит об этом беспокоиться?

спасибо

Ответы [ 5 ]

18 голосов
/ 29 января 2010

Обычно каждый раз, когда у вас есть единица работы, которая либо чувствительна к внешним изменениям, либо требуется возможность откатывать каждое изменение , если возникает ошибка или какая-либо другая причина.

Ищите здесь отличные ответы и причины их использования .

9 голосов
/ 29 января 2010

В дополнение к тому, что написал Ник Крейвер, вы захотите использовать транзакцию, когда у вас есть серия записей, которые должны выполняться атомарно;то есть все они должны преуспеть, или никто не должен преуспеть.

8 голосов
/ 29 января 2010

Транзакции следует использовать, когда существует вероятность того, что неудачное завершение или чье-либо чтение или запись в середине вашей задачи может привести к повреждению данных. Они включают, но не ограничиваются:

  • Чтение из таблицы для последующего удаления
  • Запись связанных данных в несколько таблиц
4 голосов
/ 29 января 2010

Вы используете транзакции, когда у вас есть группа действий, которые должны быть атомарными (либо все выполнено успешно, либо ни одно не выполнено). Оборачивание этих действий в транзакции позволяет вам откатить действия, которые уже были выполнены успешно, когда вы столкнулись с ошибкой. Это также гарантирует согласованность данных, с которыми вы работаете, поскольку блокировки будут удерживаться до завершения транзакции.

0 голосов
/ 02 ноября 2013

В некоторых рамках, например Spring, автоматические транзакции позволяют повторно выполнить транзакцию, если она не удалась.

...