Vliv savepointu na úrovně izolace
Teď, když znáš savepointy, využijeme je k nastavení série transakcí, které všechny potřebují pracovat se stejným počátečním snímkem dat. REPEATABLE READ je úroveň izolace, která zajistí, že každý příkaz uvnitř transakce vidí stejná data jako první příkaz – nikoli data upravená předchozími příkazy.
FEEIC nedávno povolila postupné omezení zahraničních vkladů, pole RCON2203 v tisících dolarů. Nová omezení jsou: 35 % pro vklady nad 1 miliardu dolarů, 25 % pro vklady nad 500 milionů dolarů a 13 % pro vklady nad 300 milionů dolarů. Příkazy by šlo seřadit tak, aby se data nesnižovala vícekrát. S REPEATABLE READ však každý příkaz vidí data před jakýmikoli úpravami.
Toto cvičení je součástí kurzu
Transakce a ošetření chyb v PostgreSQL
Pokyny k cvičení
- Zahaj transakci s úrovní izolace
REPEATABLE READ. - Sniž hodnotu
RCON2203o 35 % pro částky nad 1 miliardu dolarů, o 25 % pro částky nad 500 milionů dolarů nebo o 13 % pro částky nad 300 milionů dolarů – za každým příkazem nastavSAVEPOINT. - Transakci uzavři.
- Vypočítej součet pole
RCON2203.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
-- 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