Преимущества использования транзакций Mysql - PullRequest
3 голосов
/ 05 декабря 2011

Я только что узнал об этой функции в innodb, и я немного растерялся.

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

И они медленнее, чем обычные запросы?

Ответы [ 3 ]

4 голосов
/ 05 декабря 2011
Besides being able to do multiple queries and rollback if one of them fails, are there any others?

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

  • 100 долларов покидает счет первого клиента
  • 100 долларов поступает на счет друга

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

And are they slower than the normal queries?

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

3 голосов
/ 05 декабря 2011

Использование транзакций может позволить вам применять свойства ACID (атомарность, согласованность, изоляция, долговечность): http://en.wikipedia.org/wiki/ACID

1 голос
/ 05 декабря 2011

Транзакции имеют две основные цели:

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