Mysql: ROLLBACK для нескольких запросов - PullRequest
1 голос
/ 29 декабря 2010

У меня более трех запросов MySql в сценарии PHP, запущенных по расписанию.Если запрос отловит ошибку, скрипт выдаст исключение и откат этого запроса Mysql.Он работает нормально.

Однако, если первый запрос работает нормально, но не 2-й запрос, выдается исключение, он откатывает 2-й, но не 1-й запрос.

Я использую begin_trans (), commit и rollback () для отдельных запросов, потому что иногда мне нужно откатить один запрос, иногда все запросы.Есть ли способ откатить один запрос или все запросы?

Заранее спасибо

ОБНОВЛЕНИЕ:

У меня получилось, проблем с begin_trans ()commit и rollback (), конфигурация соединения с базой данных отличалась для одного запроса от других запросов, сумасшедший код без каких-либо комментариев !!!

Ответы [ 3 ]

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

Единственное, что нужно откатить, - это операция записи (INSERT, UPDATE или DELETE). Я предполагаю, что вы используете слово «запрос» для обозначения чего-то другого, кроме операции SELECT.

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

ОБНОВЛЕНИЕ:

Теперь я в замешательстве; неудивительно, что вы есть.

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

Когда вы совершаете транзакцию, вы не можете ее откатить. Поэтому вам придется принять решение: либо операция A является частью собственной транзакции, либо сгруппирована с B, C и D в другую. Но не оба.

1 голос
/ 08 ноября 2012

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

И это зависит от варианта использования в бизнесе.

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

Откат применяется ко всем запросам в текущей транзакции.

[отредактировано после обновления вопроса]

В настоящее время MySQL не поддерживает вложенную транзакцию, поэтому сделка выполняется по принципу «все или ничего».Вы можете только откатить все запросы внутри транзакции или зафиксировать все (успешные).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...