Wpływ punktu zapisu na poziomy izolacji
Teraz, gdy wiesz już, jak działają punkty zapisu, wykorzystaj je do skonfigurowania serii transakcji, które wszystkie muszą korzystać z tego samego początkowego migawki danych. REPEATABLE READ to poziom izolacji, dzięki któremu każda instrukcja wewnątrz transakcji operuje na tych samych danych co pierwsza instrukcja – a nie na danych będących wynikiem poprzednich instrukcji.
Ostatnio FFEIC dopuścił stopniowe ograniczanie depozytów zagranicznych – pole RCON2203 w tysiącach dolarów – w zbiorze danych. Nowe ograniczenia wynoszą: 35% dla kwot powyżej 1 miliarda dolarów, 25% dla kwot powyżej 500 milionów dolarów oraz 13% dla kwot powyżej 300 milionów dolarów. Odpowiednia kolejność tych instrukcji pozwoliłaby uniknąć wielokrotnego redukcji danych. Jednak dzięki poziomowi REPEATABLE READ każda instrukcja operuje na danych sprzed jakichkolwiek modyfikacji.
To ćwiczenie jest częścią kursu
Transakcje i obsługa błędów w PostgreSQL
Instrukcje do ćwiczenia
- Rozpocznij transakcję z poziomem izolacji
REPEATABLE READ. - Zmniejsz wartość
RCON2203o 35% dla kwot powyżej 1 miliarda dolarów, o 25% dla kwot powyżej 500 milionów dolarów lub o 13% dla kwot powyżej 300 milionów dolarów, dodającSAVEPOINTpo każdej instrukcji. - Zakończ transakcję.
- Oblicz sumę pola
RCON2203.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
-- Create a new transaction with a repeatable read isolation level
___ TRANSACTION ISOLATION LEVEL ___ ___;
-- Update records with a 35% reduction if greater than 1000000000
UPDATE ffiec_reci
SET ___ = CAST(___ AS FLOAT) * .65
WHERE CAST(RCON2203 AS FLOAT) > 1000000000;
___ million;
-- Update records with a 25% reduction if greater than 500000000
UPDATE ___
___ ___ = CAST(___ AS FLOAT) * .75
___ CAST(RCON2203 AS FLOAT) ___ 500000000;
SAVEPOINT five_hundred;
-- Update records with a 13% reduction if greater than 300000000
___ ffiec_reci
___ ___ = CAST(___ AS FLOAT) * .87
___ CAST(___ AS FLOAT) ___ 300000000;
SAVEPOINT three_hundred;
-- Commit the transaction
___;
-- Select SUM the RCON2203 field
SELECT ___(CAST(RCON2203 AS FLOAT))
FROM ffiec_reci