Продвинутый
В чем разница между Пессимистичной и Оптимистичной блокировкой?
Пессимистичная блокировка:
Мы предполагаем, что конфликт точно будет. Транзакция А читает строку и сразу блокирует ее на уровне БД (SELECT ... FOR UPDATE). Транзакция Б ждет, пока А не сделает COMMIT.
Минус: Медленно, возможны дедлоки.
Оптимистичная блокировка:
Мы предполагаем, что конфликта не будет. Строка не блокируется. В таблицу добавляется колонка version.
При обновлении проверяем: UPDATE ... WHERE id=1 AND version=1. Если Транзакция Б успела обновить строку раньше, версия стала 2, и Транзакция А получит ошибку (0 обновленных строк) и должна повторить попытку.
Плюс: Очень быстро, нет блокировок БД.