Примеры.

Версия 1.13 от Alexandr Fokin на 2023/01/10 15:20

Необходимый уровень изоляцииЗапросКомментарий
READ COMMITTEDBEGIN;

UPDATE accounts
SET balance = balance + @payment
WHERE acctnum = @account1

UPDATE accounts
SET balance = balance - @payment
WHERE acctnum = @account2

COMMIT;
  • Относительное изменения значения (а не константное).
  • Без проверок.
REPEATABLE READBEGIN;

 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;
  • Предварительная проверка условия перед изменением строк.
    Гарантия, что значение не будет изменено другими транзакциями после проверки.