Оптимистическая блокировка вообще не блокируется.
Она работает, регистрируя состояние, в котором находилась система до того, как вы начали вносить изменения, а затем продолжая и просто внося эти изменения, предполагая (оптимистично), что неткто-то еще захочет делать противоречивые обновления.Точно так же, как вы собираетесь атомарно зафиксировать эти изменения, вы бы проверили, обновил ли кто-то еще те же данные.В этом случае ваш коммит завершается неудачей.
Subversion, например, с использованием оптимистической блокировки.Когда вы пытаетесь зафиксировать, вы должны обрабатывать любые конфликты, но до этого вы можете делать со своей рабочей копией все, что захотите.
Пессимистичные блокировки работают с реальными блокировками.Предполагая, что будет конфликт, вы блокируете все, что хотите обновить, прежде чем прикасаться к нему.Всем остальным придется подождать, чтобы вы зафиксировали или откатили.
При использовании реляционной базы данных с поддержкой транзакций база данных обычно заботится о внутренней блокировке (например, при выполнении оператора UPDATE), так что для обычногоонлайн-обработка вам не нужно обрабатывать это самостоятельно.Только если вы хотите выполнять техническое обслуживание или большие партии, иногда вы хотите заблокировать таблицы.
Мы должны использовать блокировку только тогда, когда нам нужен эксклюзивный доступ к чему-либо?
Это необходимо для предотвращения конфликтующих операций из других сеансов.В общем, это означает, что обновления.Чтение данных обычно может происходить одновременно.
Блокировка происходит только тогда, когда мы используем транзакцию?
Да.Во время выполнения транзакции вы будете накапливать блокировки, освобождая их в конце.Обратите внимание, что одна команда SQL в режиме автоматической фиксации все еще является транзакцией сама по себе.