Senior
Άσκηση #3 Ποιο θα είναι το αποτέλεσμα στη συνεδρία Session #1; Σύνδεση με τη βάση δεδομένων με τον πίνακα t με τη γραμμή INSERT INTO t(id,val) VALUES (3,'c'); COMMIT; Συνεδρία #1 ------------------------ psql> BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- T1 ------------------------ Συνεδρία #2 ------------------------ psql(T2)> UPDATE t SET val='c2' WHERE id=3; COMMIT; ------------------------ Συνεδρία #1 ------------------------ psql(T1)> SELECT id,val FROM t WHERE id=3 ------------------------
sobes.tech AI
Απάντηση από 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
Это поведение обеспечивает повторяемость чтения и предотвращает фантомные чтения и неповторяющиеся чтения в рамках одной транзакции.