У меня есть транзакционное приложение, которое работает следующим образом:
try {
$db->begin();
increaseNumber();
$db->commit();
} catch(Exception $e) {
$db->rollback();
}
А затем внутри incrementNumber () у меня будет примерно такой запрос, который является единственной функцией, которая работает с этой таблицей:
// I use FOR UPDATE so that nobody else can read this table until its been updated
$result = $db->select("SELECT item1
FROM units
WHERE id = '{$id}'
FOR UPDATE");
$result = $db->update("UPDATE units SET item1 = item1 + 1
WHERE id = '{$id}'");
Все заключено в транзакцию, но в последнее время я имел дело с довольно медленными запросами, и в моем приложении происходит много параллелизма, поэтому я не могу точно убедиться, что запросызапускаться в определенном порядке.
Могут ли тупики вызвать прерывание транзакций ACID?У меня есть одна функция, которая добавляет что-то, а затем другая, которая удаляет это, но когда у меня возникают взаимоблокировки, я обнаруживаю, что данные полностью не синхронизированы, как транзакции были проигнорированы.
Это должно произойти или что-то еще не так??
Спасибо, Доминик