Ảnh hưởng của savepoint lên mức cô lập (isolation levels)
Giờ bạn đã khám phá savepoint, hãy dùng chúng để thiết lập một chuỗi giao dịch đều cần làm việc từ cùng một ảnh chụp (snapshot) ban đầu của dữ liệu. REPEATABLE READ là một mức cô lập cho phép mỗi câu lệnh bên trong giao dịch thấy cùng một dữ liệu như câu lệnh đầu tiên đã thao tác, thay vì dữ liệu đã bị thay đổi bởi các câu lệnh trước đó.
Gần đây, FFEIC cho phép dần dần cắt giảm tiền gửi nước ngoài, trường RCON2203 (đơn vị hàng nghìn), trong bộ dữ liệu. Mức cắt giảm mới là 35% cho khoản hơn $1 tỷ, 25% cho khoản hơn $500 triệu và 13% cho khoản hơn $300 triệu. Có thể sắp xếp các câu lệnh để tránh giảm trùng lặp dữ liệu. Tuy nhiên, với REPEATABLE READ, các câu lệnh sẽ thấy dữ liệu như trước khi có bất kỳ điều chỉnh nào.
Bài tập này là một phần của khóa học
Giao dịch và Xử lý Lỗi trong PostgreSQL
Hướng dẫn bài tập
- Bắt đầu một giao dịch
REPEATABLE READ. - Giảm
RCON220335% nếu hơn $1 tỷ, 25% nếu hơn $500 triệu, hoặc 13% nếu hơn $300 triệu, và đặtSAVEPOINTsau mỗi lần giảm. - Đóng giao dịch.
- Tính tổng trường
RCON2203.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
-- 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