Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Rozpocznij transakcję z poziomem izolacji REPEATABLE READ.
  • Zmniejsz wartość RCON2203 o 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ąc SAVEPOINT po 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 
Edytuj i uruchom kod