То, что могут прочитать другие сессии, зависит от того, как вы настроили свою базу данных. В MySQL это также зависит от того, какой движок базы данных вы используете. Вы ищете (в терминах ANSI SQL) «уровень изоляции» .
Многие базы данных по умолчанию будут иметь уровень изоляции, при котором чтение незафиксированных данных будет блокироваться. Поэтому, если транзакция A обновляет запись 1234 в таблице T, а затем транзакция B пытается выбрать запись 1234 до того, как A фиксирует или откатывается назад, B блокирует, пока A не выполнит одно из этих действий.
См. Транзакции MySQL, Часть II - Уровни изоляции транзакций .
Одним серьезным недостатком этого является то, что операции пакетного обновления, которые живут в длительных транзакциях (как правило), потенциально могут блокировать много запросов.
Вы также можете установить его так, чтобы B видел незафиксированные данные, но это часто не рекомендуется.
В качестве альтернативы вы можете использовать схему, называемую MVCC («Управление параллелизмом нескольких версий»), которая дает различным транзакциям согласованное представление данных на основе времени, когда транзакция началась. Это позволяет избежать проблемы незафиксированного чтения (считывания данных, которые могут быть откатаны) и является гораздо более масштабируемым, особенно в контексте долгосрочных транзакций.
MySQL поддерживает MVCC .