Исходный код вики Примеры.

Версия 1.14 от Alexandr Fokin на 2023/01/14 16:17

Скрыть последних авторов
Alexandr Fokin 1.10 1 (% style="width:1426px" %)
2 |(% style="width:155px" %)**Необходимый уровень изоляции**|(% style="width:614px" %)**Запрос**|(% style="width:652px" %)**Комментарий**
Alexandr Fokin 1.9 3 |(% style="width:155px" %)READ COMMITTED|(% style="width:614px" %){{code language="sql"}}BEGIN;
Alexandr Fokin 1.1 4
Alexandr Fokin 1.2 5 UPDATE accounts
6 SET balance = balance + @payment
7 WHERE acctnum = @account1
Alexandr Fokin 1.1 8
Alexandr Fokin 1.2 9 UPDATE accounts
10 SET balance = balance - @payment
Alexandr Fokin 1.11 11 WHERE acctnum = @account2
Alexandr Fokin 1.1 12
Alexandr Fokin 1.10 13 COMMIT;{{/code}}|(% style="width:652px" %)(((
Alexandr Fokin 1.7 14 * Относительное изменения значения (а не константное).
15 * Без проверок.
16 )))
Alexandr Fokin 1.9 17 |(% style="width:155px" %)REPEATABLE READ|(% style="width:614px" %){{code language="sql"}}BEGIN;
Alexandr Fokin 1.2 18
Alexandr Fokin 1.12 19 if (SELECT balance FROM accounts where acctnum = @account2) < @payment
Alexandr Fokin 1.1 20 RAISE EXCEPTION ''
21 END IF
22
Alexandr Fokin 1.2 23 UPDATE accounts
24 SET balance = balance + @payment
25 WHERE acctnum = @account1
Alexandr Fokin 1.1 26
Alexandr Fokin 1.2 27 UPDATE accounts
28 SET balance = balance - @payment
Alexandr Fokin 1.11 29 WHERE acctnum = @account2
Alexandr Fokin 1.1 30
Alexandr Fokin 1.10 31 COMMIT;{{/code}}|(% style="width:652px" %)(((
Alexandr Fokin 1.7 32 * Предварительная проверка условия перед изменением строк.
Alexandr Fokin 1.14 33 Гарантия, что значение не будет изменено другими транзакциями после проверки (или их изменение будет обнаружено и приведет к ошибке).
34 * В запросе могут использоваться как относительные, так и константные значения, при условии что значение было сформировано после проверки допустимости операции.
Alexandr Fokin 1.7 35 )))