при использовании стратегии оптимистически-блокировки, это может решить проблему параллелизма, как показано ниже:Оптимистично-Блокировка абсолютно безопасна?
| the first transaction started | | | | select a row | | | the second transaction started | update the row with version checking | | | select the same row | commit txn | | | update the row with version checking | | | | rolls back because version is dirty
Но что, если в крайне редких случаях, если обновление во второй транзакции после udpate в первой транзакции, но перед тем, сделка совершена?
| the first transaction started | | | the second transaction started | select a row | | | select the same row | update the row with version checking | | | update the row with version checking | commit txn | | | rolls back because version is dirty // will it? | | | |
Я сделал эксперимент, что обновление во второй транзакции не мог читать «грязной» версии, потому что первая сделка не было совершено еще. Произойдет ли в этом случае вторая транзакция?
@Adam Arold Спасибо, что рассказали мне этот афоризм. Я google, потому что я не являюсь носителем английского языка :) Но будет ли стратегия оптимистичного блокирования работать в случае, о котором я упоминал? – Hippoom
Если это действительно оптимистично, почему вы используете функцию транзакции? Обновление само по себе не будет требовать откат. – tia
@tia Возможно, в примере это нормально с транзакциями или без них. Но иногда мне нужно отменить другие изменения (например, возможно, некоторые вставки в подтаблицу) в базу данных – Hippoom