Возвращаемые данные зависят от состояния БД на момент запуска запроса, а не на момент открытия соединения.
Допустим, вы не используете какое-либо конкретное управление транзакциями в вашемкод и давайте предположим, что оператор обновления представляет собой отдельную строку или обновление таблицы.В этом случае соединение a будет видеть X = 2.это связано с тем, что оба соединения будут использовать уровень транзакции по умолчанию, который считывается зафиксированным для обоих соединений.
Теперь в вашем примере нет способа установить соединение. A прочитайте X = 1, если это обновление одного значения в одной строке.Но если вы используете транзакцию для соединения B, не фиксируете и оставляете соединение открытым.Запрос на соединение A будет блокироваться до истечения времени ожидания.По сути, X не будет доступен, пока не будет сделан B.
Также, если вы обновляете 10 миллионов строк в одной транзакции соединения B, а соединение A находилось в другом потоке и транзакции.Соединение A может прочитать некоторые старые / устаревшие / недействительные данные, используя уровень изоляции транзакции «read uncommitted».
Надеюсь, это поможет.