Senior
57
Zadanie #3 Jaki będzie wynik w sesji Session #1? Połączenie z bazą danych z tabelą t z linią INSERT INTO t(id,val) VALUES (3,'c'); COMMIT; Sesja #1 ------------------------ psql> BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- T1 ------------------------ Sesja #2 ------------------------ psql(T2)> UPDATE t SET val='c2' WHERE id=3; COMMIT; ------------------------ Sesja #1 ------------------------ psql(T1)> SELECT id,val FROM t WHERE id=3 ------------------------
Firmy, w których zadano pytania
Odpowiedź od AI
sobes.tech AI
В режиме изоляции REPEATABLE READ транзакция T1 видит снимок данных на момент начала транзакции и не видит изменений, сделанных другими транзакциями после её начала.
Сценарий:
- В Session #1 (T1) начинается транзакция с уровнем REPEATABLE READ.
- В Session #2 (T2) обновляется строка с id=3 и коммитится.
- В Session #1 выполняется SELECT для id=3.
Результат SELECT в T1 будет таким, каким была строка на момент начала транзакции T1, то есть val='c'. Обновление, сделанное в T2 после начала T1, не будет видно в T1 до коммита или новой транзакции.
Таким образом, в Session #1 будет:
id | val
---+-----
3 | c
Это поведение обеспечивает повторяемость чтения и предотвращает фантомные чтения и неповторяющиеся чтения в рамках одной транзакции.