Будет ли работать транзакция mysql, если для запросов используется несколько соединений? - PullRequest
2 голосов
/ 04 декабря 2011

Итак, вот оно ...

// Я запускаю транзакцию $ mysqli = new mysqli (...);

// Запуск транзакции $ mysqli-> autocommit (FALSE);

  • вот выделенный подготовленный stmt с собственным подключением к базе данных
  • вот вставка подготовленный stmt с собственным подключением к базе данных
  • вот выделенный подготовленный stmtс указанным выше БД conn
  • вставьте новый conn
  • вставьте новый conn
  • вставьте новый conn

, если каждый подготовленный запрос вернется в true, он будет ($ mysqli-> commit ()) else $ mysqli-> rollback

Я не знаю, по какой причине эта транзакция будет автоматически фиксироваться

Я выполнил некоторую транзакцию с 3 множественными соединениями, и они откатились...этого нет ... Сделано ли mysql для поддержки транзакции, которая имеет запросы с отдельными соединениями?

Решено ... если запросы из разных таблиц взаимозависимы, как в моем случае, и вам нужна надежная защита доступа к даннымустановите для autocommit значение false для каждого соединения,Если вы открываете, установите для переменной var значение false для каждой неисправной логики бизнес-процессов, если что-то не получится, откатите каждый набор запросов, иначе запустите каждый запрос на запрос ... Да, транзакция выполняется для каждого соединения, было что-то еще, что управляло откатом, когда я сказалчто mysql сделал откат для нескольких множественных транзакций conn

Повторное редактирование: ofc это не будет работать как обычная транзакция ... в случае сбоя системы данные будут сохраняться до момента сбоя

1 Ответ

7 голосов
/ 04 декабря 2011

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

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

...