Откат транзакции в PHP (MariaDB, InnoDB) при нескольких параллельных транзакциях изменяющих одинаковые поля

120
05 октября 2019, 07:40

У меня есть несколько PHP кодов с PDO транзакциями, измняющими одинаковые поля в базе данных. Коды могут запускаться в разные моменты времени. Если произойдёт ситуация, когда нужно будет откатить некоторую транзакцию, но во время выполнения этой транзакции, другая уже успела изменить поле, которое нужно откатить, то что вообще произойдёт? Уровень изоляции - REPEATABLE READ. Хотя это особого отношения к вопросу, кажется, не должно иметь. П.С. И я не использую FOR UPDATE, чтобы другие транзакции могли спокойно менять нужные им поля во время выполнения других транзакций.

Answer 1

другая уже успела изменить поле, которое нужно откатить

Эта ситуация просто невозможна. Если транзакция обновила строку - то до завершения этой транзакции все последующие транзакции желающие изменить эту строку будут ждать. Именно потому что неизвестно, что с этой строкой происходит и как она должна выглядеть: то ли транзакция откатится и надо брать что было до неё, то ли зафиксируется и надо брать то что стало, то ли транзакция ещё что-то поменяет в этой строке (потому что имеет право).

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

READ ALSO
Содержимого формы нет в письме

Содержимого формы нет в письме

Настроил скрипт отправки формы, письмо доходит, но без данных формыФорма:

116
Laravel ошибка про имэйл

Laravel ошибка про имэйл

сама ошибка

90
Пример создания блокнота не работает

Пример создания блокнота не работает

Пытаюсь запустить пример создания блокнота из туториалов Qt (https://docqt

148
Подсчет одинаковых символов в строке

Подсчет одинаковых символов в строке

Вроде все работает, но по условию препода символы и верхнего регистра должны быть приняты как одинаковы, то есть "А"=="а"Как можно это реализовать?

109