2015-11-18 2 views
2

При использовании повторной изоляции Read вам гарантируется, что строки, которые вы читаете с помощью SELECT, не будут изменены до завершения транзакции.Что использовать SELECT .. FOR UPDATE при использовании повторной изоляции Read?

Это похоже на то, что предлагает SELECT .. FOR UPDATE.

Итак, в чем смысл использования SELECT FOR UPDATE при использовании повторной изоляции Read?

ответ

2

Когда вы читаете запись под Repeatable Read, вы получаете блокировку чтения, но другие транзакции также могут получить блокировку чтения, что может помешать вам позже сделать обновление. Использование FOR UPDATE информирует о любых других транзакциях, которые запрашивают блокировку чтения, что они должны ждать, пока вы не закончите обновление записи.

+0

так что, по существу, применяется блокировка «запись» к выбранным строкам при использовании FOR UPDATE? – pdeva

+0

Не замок записи, еще нет. Просто обеспечение того, чтобы никто не мешал вам получать блокировку записи. Это иногда называют блокировкой чтения-намерения-записи (Есть также блокировки чтения с целью чтения). – cliffordheath

+0

, если он не позволяет другим потокам получать блокировку чтения или записи, то чем он отличается от блокировки записи? – pdeva