какая транзакция в MySQL? - PullRequest
       3

какая транзакция в MySQL?

2 голосов
/ 23 декабря 2010

Все же я не понял, какая транзакция в MySQL?В чем его преимущество и как я могу подать заявку?

Простое объяснение, пожалуйста, но не так просто.Я знаю, что такое БД ..

Ответы [ 8 ]

6 голосов
/ 23 декабря 2010

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

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

Транзакция контролирует весь SQL, выполненный в транзакции, чтобы убедиться, что все успешно.Если что-то не получается, он откатывает все операторы.

4 голосов
/ 23 декабря 2010

Транзакция - это набор изменений, которые не фиксируются (другими словами, сохраняются) до тех пор, пока вы не выполните команду commit.Таким образом, транзакции позволяют вам сказать: «Я хочу внести все эти изменения в базу данных, но на самом деле не сохраняю мои изменения, пока не будет создан весь список».Если на этом пути есть проблема, вы можете откатить (другими словами, отменить) любые изменения, которые вы вносили.

3 голосов
/ 23 декабря 2010

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

Пример:

Transaction begins:
doA();
doB();
doC();
Transaction ends:
doD();

Если произошел сбой A, ничего не изменилось.
Если B не удалось, ничего не изменилось.
Если C не удалось, ничего не изменилось.
Если D не удалось, A, B, C. все еще выполняются.

Если что-то не так внутри транзакции aвыполняется так называемый откат, который отменяет все внесенные изменения.

2 голосов
/ 23 декабря 2010

Транзакции не ограничиваются MySql - большинство СУБД используют их.

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

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

Статья wikipedia довольно информативна.

Транзакции предоставляютПредложение «все или ничего», утверждающее, что каждый рабочий блок, выполняемый в базе данных, должен либо завершаться полностью, либо вообще не иметь никакого эффекта.Кроме того, система должна изолировать каждую транзакцию от других транзакций, результаты должны соответствовать существующим ограничениям в базе данных, а успешно завершенные транзакции должны записываться в долговременное хранилище.

1 голос
/ 23 декабря 2010

Все же я не понял, какая транзакция в MySQL?

BEGIN TRANSACTION

INSERT
INTO    mytable
VALUES  (1)

INSERT
INTO    mytable
VALUES  (2)

COMMIT

В результате вы либо получите оба значения (1 и 2) в таблице, либо не получите ни одного.

Нет шансов, что одно значение попадет туда, а другое нет.

1 голос
/ 23 декабря 2010

Страница википедии отдает должное.В основном, однако, транзакция позволяет вам выполнять операторы как одно действие, изолированно.Это также позволяет отменить ошибки.Т.е.

START TRANSACTION;
DELETE FROM foo WHERE bar = baz;
ROLLBACK;

Изменений не будет.

Транзакции также изолированы.Это означает, что представление, которое видит первое утверждение, совпадает с последним.Если мы сделаем

SELECT * FROM foo;
SELECT * FROM foo;

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

0 голосов
/ 23 декабря 2010

Когда вы выполняете вставку или обновление базы данных, обновление / вставка вступает в силу немедленно. Когда у вас есть транзакционная таблица, обновление / вставка ставится в очередь, пока вы не поставите в очередь все действия, которые необходимо выполнить. На этом этапе вы говорите MySQL, чтобы зафиксировать все изменения одновременно. Преимущество этого заключается в том, что если какое-либо из действий не будет выполнено, ни одно из них не повлияет.

0 голосов
/ 23 декабря 2010

Вот некоторая информация:

http://en.wikipedia.org/wiki/Database_transaction

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

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

Надеюсь, в этом есть какой-то смысл:)

...