Что такое транзакция базы данных?


114

Может ли кто-нибудь дать прямое (но не более простое, чем возможно) объяснение транзакции применительно к вычислениям (даже если оно скопировано из Википедии)?

Ответы:


239

Транзакция - это единица работы, которую вы хотите рассматривать как «единое целое». Это должно произойти либо полностью, либо не произойти вовсе.

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

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


Спасибо за очень простой пример
Nomadme

хорошее объяснение!
Ян Мио Аунг

81

Транзакция - это способ представления изменения состояния. В идеале транзакции имеют четыре свойства, обычно известные как ACID:

  • Атомарно (если изменение зафиксировано, это происходит одним махом; вы никогда не увидите «половину изменения»)
  • Последовательно (изменение может произойти только в том случае, если новое состояние системы будет действительным; любая попытка зафиксировать недопустимое изменение потерпит неудачу, оставив систему в ее предыдущем допустимом состоянии)
  • Изолированный (никто другой не видит никакой части транзакции, пока она не будет зафиксирована)
  • Надежный (после того, как изменение произошло - если система сообщает, что транзакция была зафиксирована, клиенту не нужно беспокоиться о «промывке» системы, чтобы изменение «закрепилось»)

См. Запись в Википедии ACID для получения более подробной информации.

Хотя это обычно применяется к базам данных, это не обязательно. (В частности, см. Программная транзакционная память .)


46

Вот простое объяснение. Вам нужно перевести 100 баксов со счета A на счет B. Вы можете:

accountA -= 100;
accountB += 100;

или

accountB += 100;
accountA -= 100;

Если что-то пошло не так между первой и второй операцией в паре, у вас проблема - либо 100 баксов пропали, либо они возникли из ниоткуда.

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

beginTransaction;
accountB += 100;
accountA -= 100;
commitTransaction;

либо переведет 100 баксов, либо оставит оба счета в исходном состоянии.


31

«Серия операторов манипулирования данными, которые должны либо полностью завершиться, либо полностью выйти из строя, оставляя базу данных в согласованном состоянии»


2
Не только база данных. Мы можем распространить эту концепцию на другие компоненты, такие как служба очередей или состояние внешних систем. Итак, «серия операторов манипулирования данными, которые должны либо полностью завершиться, либо полностью выйти из строя, оставляя систему в согласованном состоянии»
Михал Чаневски

10

Транзакция - это последовательность одной или нескольких операций SQL, которые рассматриваются как единое целое.

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

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

Транзакция поддерживает так называемые свойства ACID:

  • A: атомарность;
  • C: последовательность;
  • I: изоляция;
  • D: Долговечность.

4

http://en.wikipedia.org/wiki/Database_transaction
http://en.wikipedia.org/wiki/ACID
ACID = A tomicity, С onsistency, я solation, D urability

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


1

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

Из википедии:

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

http://en.wikipedia.org/wiki/Transaction_processing#Implementations


1

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

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


1

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

Основные операции транзакции - это чтение и запись.

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


0

Я считаю, что с точки зрения СУБД транзакция - это атомарное действие.

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

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


0

Транзакция - это неделимая единица обработки данных. Все транзакции должны иметь свойства ACID:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.