Семантика SQL для «ОБНОВЛЕНИЕ» и «СОЕДИНЕНИЕ» - PullRequest
10 голосов
/ 09 августа 2011

Я хотел бы понять точную семантику использования «FOR UPDATE» в связи с «JOIN». Это просто блокирует все строки, которые были эффективно использованы для создания конечного результата? Это делает что-то еще?

Из этой темы:

http://postgresql.1045698.n5.nabble.com/Select-For-Update-and-Left-Outer-Join-td4363154.html

Я понимаю, что между реализациями баз данных есть некоторые важные различия. Однако я не уверен. Меня интересует поведение любой популярной СУБД, в частности PostgreSQL.

1 Ответ

16 голосов
/ 05 сентября 2011

Вы правильно поняли. В «SELECT FOR UPDATE» с JOIN любые строки, которые вносят вклад в возвращенные строки, будут заблокированы. Вы можете изменить это поведение, добавив «OF table_a» к «FOR UPDATE», чтобы блокировались только строки из table_a. Вы можете прочитать больше об этом в документации Postgres здесь:

http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE

...