Цитата:
Сообщение от
Kabardian
А это тогда о чем? (текст сразу под графиком)
Там не написано про блокировки
после апдейта ничего. OCC работает так:
Выбирает запись, запоминая его версию, дальше апдейтит, выставляя блокировку и проверяя что версия не изменилась. Если версия изменилась, то выбрасывает особый эксепшн. Блокировка держится до конца тразакции.
Если бы этого не было, то возможен был бы следующий сценарий.
Например некая транзакйия хочет выбрать две записи и их изменить. Если она не заблокирует первую запись до конца транзакции, то при этом другая транзакия сможет увидеть ее содержимое до конца первой транзакции и пойдет дальше с учетом этих грязных данных (dirty read). Первая транзакция может быть откатана, напрммер, потому что вторую запись успела изменить третья транзакция (после чтения первой и до сохранения). И тогда у нас будут в базе данные частично как будто первая транзакция завершилась успешно (в первой записи) в частично как будно нет (во второй)