Базы данных
Транзакции
insert into accs (id, money) values (1, 0);
update accs set money = money - 100 where id = 1; update accs set money = money + 100 where id = 2;
start transaction
commit
rollback
start transaction; if ((select money from accs where id = 1) <= 100) rollback; end if; update accs set money = money - 100 where id = 1; update accs set money = money + 100 where id = 2; commit;
Транзакция 1 | Транзакция 2 |
---|---|
retrieve v update v commit | retrieve v update v commit |
Транзакция 1 | Транзакция 2 |
---|---|
update v commit | update v rollback |
Транзакция 1 | Транзакция 2 |
---|---|
retrieve v commit | update v rollback |
Транзакция 1 | Транзакция 2 |
---|---|
retrieve v_1 retrieve v_2 commit | update v_1 = v_1 - 10 update v_2 = v_2 + 10 commit |
– | S | X | |
– | + | + | + |
S | + | + | − |
X | + | − | − |
Транзакция 1 | Транзакция 2 |
---|---|
retrieve v_1 update v_2 | retrieve v_2 update v_1 |
Транзакция 1 | Транзакция 2 |
---|---|
retrieve v commit | update v rollback |
if v_1 + v_2 ≥ Δ then v_1 = v_1 − Δ end if
if v_1 + v_2 ≥ Δ then v_2 = v_2 − Δ end if
Аномалия / Уровень | S | SN | RR | RC | RU |
---|---|---|---|---|---|
Косая запись | − | + | + | + | + |
Фантомная запись | − | − | + | + | + |
Неповторяемое чтение | − | − | − | + | + |
Грязное чтение | − | − | − | − | + |
start transaction [режим] [изоляция] [настройки]
read {only | write}
[isolation level уровень]
commit [work] [and [no] chain]
rollback [work] [and [no] chain]
start transaction isolation level serializable; // 1 start transaction isolation level read committed; // 2
start transaction isolation level read committed; // 1 start transaction isolation level serializable; // 2 commit and no chain; // 3 rollback;
savepoint имя
rollback to savepoint имя
release savepoint имя
add constraint ... режим
set constraints {all|имена} {deferred|immediate}