Effect van een savepoint op isolatieniveaus
Nu je savepoints hebt verkend, gaan we ze gebruiken om een reeks transacties op te zetten die allemaal met dezelfde beginsnapshot van de gegevens moeten werken. REPEATABLE READ is een isolatieniveau waarmee we elke instructie binnen de transactie dezelfde gegevens kunnen geven als waarop de eerste instructie werkte, in plaats van de gegevens die het resultaat zijn van de voorgaande instructie(s).
Onlangs stond de FFEIC een stapsgewijze beperking toe van buitenlandse deposito’s, veld RCON2203 in duizenden, in de gegevensset. De nieuwe beperking is 35% voor meer dan $1 miljard, 25% voor meer dan $500 miljoen en 13% voor meer dan $300 miljoen. Het is mogelijk om deze statements te ordenen zodat de gegevens niet meer dan één keer worden verlaagd. Met REPEATABLE READ hebben statements echter de gegevens van vóór eventuele aanpassingen.
Deze oefening maakt deel uit van de cursus
Transacties en foutafhandeling in PostgreSQL
Oefeninstructies
- Start een
REPEATABLE READ-transactie. - Verlaag
RCON2203met 35% als het meer is dan $1 miljard, met 25% als het meer is dan $500 miljoen, of met 13% als het meer is dan $300 miljoen, met eenSAVEPOINTna elke stap. - Sluit de transactie af.
- Tel het veld
RCON2203op.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
-- 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