Добавить task
This commit is contained in:
commit
afccf04380
123
task
Normal file
123
task
Normal file
@ -0,0 +1,123 @@
|
||||
--task 1
|
||||
CREATE TABLE aircrafts_tmp
|
||||
AS SELECT * FROM aircrafts;
|
||||
--на первом терминале
|
||||
BEGIN ISOLATION LEVEL READ COMMITTED;
|
||||
SHOW transaction_isolation;
|
||||
UPDATE aircrafts_tmp
|
||||
SET range = range + 100
|
||||
WHERE aircraft_code = 'SU9';
|
||||
--на втором терминале
|
||||
BEGIN;
|
||||
UPDATE aircrafts_tmp
|
||||
SET range = range + 200
|
||||
WHERE aircraft_code = 'SU9';
|
||||
--команда будет не активна, пока не завершится первая транзакция
|
||||
COMMIT; --в первый терминал; update происходит мнгновенно во втором терминале
|
||||
--на втором терминале
|
||||
SELECT *
|
||||
FROM aircrafts_tmp
|
||||
WHERE aircraft_code = 'SU9';
|
||||
end;
|
||||
|
||||
--на первом терминале
|
||||
begin;
|
||||
SELECT * FROM aircrafts_tmp
|
||||
--на втором терминале
|
||||
begin;
|
||||
DELETE FROM aircrafts_tmp
|
||||
WHERE model ~ '^Boe';
|
||||
SELECT * FROM aircrafts_tmp;
|
||||
end;
|
||||
--на первом терминале
|
||||
SELECT * FROM aircrafts_tmp;
|
||||
end;
|
||||
|
||||
|
||||
--task 2
|
||||
--на первом терминале
|
||||
begin;
|
||||
SELECT *
|
||||
FROM aircrafts_tmp
|
||||
WHERE range < 2000;
|
||||
UPDATE aircrafts_tmp
|
||||
SET range = 2100
|
||||
WHERE aircraft_code = 'CN1';
|
||||
UPDATE aircrafts_tmp
|
||||
SET range = 1900
|
||||
WHERE aircraft_code = 'CR2';
|
||||
--на втором терминале
|
||||
BEGIN;
|
||||
SELECT *
|
||||
FROM aircrafts_tmp
|
||||
WHERE range < 2000;
|
||||
DELETE FROM aircrafts_tmp WHERE range < 2000; --была удалена строка: CN1 | Cessna 208 Caravan | 1200
|
||||
--на первом терминале
|
||||
rollback;
|
||||
end;
|
||||
SELECT * FROM aircrafts_tmp;
|
||||
|
||||
|
||||
--task 4
|
||||
--на первом терминале
|
||||
begin;
|
||||
SELECT *
|
||||
FROM aircrafts_tmp
|
||||
WHERE range > 6000;
|
||||
--на втором терминале
|
||||
BEGIN;
|
||||
INSERT INTO aircrafts_tmp (aircraft_code, model, range) VALUES ('new', 'New Aircraft Model', 6100);
|
||||
end;
|
||||
--на первом терминале
|
||||
SELECT *
|
||||
FROM aircrafts_tmp
|
||||
WHERE range > 6000;
|
||||
end;
|
||||
-- aircraft_code | model | range
|
||||
-----------------+--------------------+-------
|
||||
-- 773 | Боинг 777-300 | 11100
|
||||
-- 763 | Боинг 767-300 | 7900
|
||||
-- 319 | Аэробус A319-100 | 6700
|
||||
-- new | New Aircraft Model | 6100
|
||||
|
||||
|
||||
--task 5
|
||||
|
||||
--1
|
||||
-- на первом терминале
|
||||
BEGIN ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT * FROM aircrafts_tmp WHERE range > 6000 FOR UPDATE;
|
||||
--на втором терминале
|
||||
BEGIN ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT * FROM aircrafts_tmp WHERE range > 7000 FOR UPDATE;
|
||||
--вторая транзакция не будет выполняться, так как её блокирует первая
|
||||
|
||||
--2
|
||||
--на первом терминале
|
||||
BEGIN ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT * FROM aircrafts_tmp WHERE range > 6000 FOR UPDATE;
|
||||
--на втором терминале
|
||||
BEGIN ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT * FROM aircrafts_tmp WHERE range > 5000 FOR UPDATE;
|
||||
--вторая транзакция не блокирует строки, которые включают в себя строки, уже заблокированные первой транзакцией, из-за конфликта блокировок
|
||||
|
||||
--3
|
||||
--на первом терминале
|
||||
BEGIN ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT * FROM aircrafts_tmp WHERE range > 6000 FOR UPDATE;
|
||||
--на втором терминале
|
||||
BEGIN ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT * FROM aircrafts_tmp WHERE range > 5000 AND range < 8000 FOR UPDATE;
|
||||
--вторая транзакция не блокирует строки, пересекающиеся с теми, которые заблокированы первой транзакцией, из-за конфликта блокировок
|
||||
|
||||
--4
|
||||
--на первом терминале
|
||||
BEGIN ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT * FROM aircrafts_tmp WHERE range > 6000 FOR UPDATE;
|
||||
--на втором терминале
|
||||
BEGIN ISOLATION LEVEL READ COMMITTED;
|
||||
SELECT * FROM aircrafts_tmp WHERE range < 2000 FOR UPDATE;
|
||||
--вторая транзакция заблокировала строки, не пересекающиеся с теми, которые заблокированы первой транзакцией
|
||||
|
||||
|
||||
--Вывод:в режиме изоляции Read Committed блокировки, установленные через SELECT ... FOR UPDATE, ограничивают возможность других транзакций блокировать те же строки или их подмножества/надмножества; конфликты блокировок возникают, если строки пересекаются либо находятся в отношении подмножества или надмножества с уже заблокированными строками
|
Loading…
Reference in New Issue
Block a user