Примеры.
Версия 1.17 от Alexandr Fokin на 2023/02/25 15:08
Необходимый уровень изоляции | Запрос | Комментарий |
READ COMMITTED | BEGIN; UPDATE accounts SET balance = balance + @payment WHERE acctnum = @account1 UPDATE accounts SET balance = balance - @payment WHERE acctnum = @account2 COMMIT; |
|
REPEATABLE READ | BEGIN; if (SELECT balance FROM accounts where acctnum = @account2) < @payment RAISE EXCEPTION '' END IF UPDATE accounts SET balance = balance + @payment WHERE acctnum = @account1 UPDATE accounts SET balance = balance - @payment WHERE acctnum = @account2 COMMIT; |
Данное поведение также может быть реализовано на уровне READ COMMITTED, но для этого нужно использовать механизм явных блокировок (обычно это что-то вроде UPDLOCK). |