Когда следует использовать транзакции в моих запросах?
Я читаю очень подробные руководства о том, как использовать транзакции с типами баз данных и ядрами баз данных, но я не нашел руководства, которое учит меня, когда и почему я должен их использовать.
Я знаю, что транзакции обычно используются для банковских операций, поэтому, когда мы работаем с денежными данными, но могу себе представить, что они используются многими другими способами.
Сегодня я работаю над страницей с различными операторами INSERT
для реляционной базы данных, и мне хотелось знать, является ли это одним из случаев, когда я должен их использовать.
У меня создается впечатление, что я не знаю случаев, когда данные могут быть частично потеряны (кроме ошибок в кодере), поэтому я всегда беспокоюсь о том, когда я должен их использовать.
Может кто-нибудь объяснить или дать ссылку на эти основные правила?
Я использую MySQL 5.0.8
. Должен ли я использовать InnoDB
для всех таблиц, требующих транзакций? Если да, то InnoDB
медленнее обычного MyISAM
, но я не должен беспокоиться об этом?
спасибо
Ответы
Ответ 1
В принципе, в любое время, когда у вас есть единица работы, чувствительная к внешним изменениям или , требуется возможность отката при каждом изменении, если возникает ошибка или какая-то другая причина.
Посмотрите здесь несколько отличных ответов и их причины для их использования.
Ответ 2
В дополнение к тому, что написал Nick Craver, вы хотели бы использовать транзакцию, когда у вас есть серия записей, которые должны выполняться атомарно; то есть все они должны преуспеть, или никто не должен преуспеть.
Ответ 3
Транзакции следует использовать, когда есть вероятность, что либо сбой завершения, либо чье-либо еще чтение или запись в середине вашей задачи может привести к повреждению данных. К ним относятся, но не ограничиваются:
- Чтение из таблицы для последующего удаления
- Запись связанных данных в несколько таблиц
Ответ 4
Вы используете транзакции, когда у вас есть группа действий, которые должны быть атомарными (либо все успешно, либо не удастся). Объединение этих действий в транзакцию позволяет вам выполнять откатные действия, которые уже преуспели при возникновении ошибки. Он также гарантирует, что данные, с которыми вы работаете, согласуются с тем, что блокировки будут удерживаться до завершения транзакции.
Ответ 5
В некоторых рамках, например, Spring, автоматические транзакции позволяют повторно выполнить транзакцию, если она не удалась.