Mysql транзакции вопрос - PullRequest
       5

Mysql транзакции вопрос

1 голос
/ 03 октября 2010

Мой код:

mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");

insert_query, update_query1, update_query2

mysql_query("COMMIT");
update_query3

Почему update_query3 запрос не работает, если я поставлю его после COMMIT?Это работает, если я поставлю его перед COMMIT.Это почему?Это действительно странно.

Спасибо

Ответы [ 3 ]

2 голосов
/ 03 октября 2010

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

0 голосов
/ 03 октября 2010

update_query3 не является частью какой-либо существующей транзакции. Таким образом, начинается новая (неявная) транзакция.

Вы никогда не фиксируете транзакцию, начатую update_query3, поэтому она будет отменена при закрытии соединения.

0 голосов
/ 03 октября 2010

Потому что COMMIT (или ROLLBACK в этом отношении) отмечает конец транзакции.

Вам придется использовать:

mysql_query("COMMIT AND CHAIN");

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

Но это все равно означает, что вам необходимо:

mysql_query("COMMIT");

... после update_query3 для принятия изменений.

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