Ответ:x
будет иметь значение, которое у него было на отметке времени чтения.
Чтобы быть более конкретным, фиксация является частью транзакции, поэтому вы можете не обращаться к ней как во время транзакции или во время фиксации, они не являются двумя отдельными операциями.
Разъяснение: Использование транзакции будет гарантировать, что все операции в границах сделок выглядят атомное к внешнему миру.
Atomic операция означает, что:
Операция должна быть либо успеха или неудачи. Между промежуточным шагом не должно быть промежуточного шага. В частности, если начинается транзакция и происходит сбой (например, отключение питания), ему необходимо отменить все изменения, которые он сделал до сих пор.
Также это означает, что внешний мир должен рассматривать его как единую операцию. Если транзакция использует некоторые значения, все значения должны быть взяты из метки времени в начале транзакции. Точно так же все изменения, которые должна совершить транзакция, будут доступны для внешнего мира сразу после отметки времени, с которой заканчивается транзакция. Это достигается с помощью надлежащей формы блокировки (эксклюзивные, чтение или запись) таблиц, участвующих в транзакции.
Так, чтобы быть более конкретным в отношении вашего вопроса, когда select x from a
вызывается в транзакции, таблица a
блокируется до сделки либо совершает или откат. Сценарий, который вы упомянули, x изменяется после выполнения этого запроса (до совершения транзакции/откат), практически невозможно.
Итак, когда вызывается select, он одновременно считывает значение и блокирует таблицу, чтобы она не могла быть изменена до момента совершения транзакции? Вы говорите, что все выходы внутри транзакции блокируют таблицу до завершения транзакции? – Benubird
@Benubird Да, мы можем в основном заключить этот путь. Все READ в транзакции сделают WRITE-блокировку для таблиц, которые они использовали, поэтому внешний мир не может WRITE для этой таблицы, но они могут свободно читать. С другой стороны, если транзакция WRITE для таблицы, то эта таблица заблокирована для READ и WRITE для внешнего мира. – Musa