2011-08-09 17 views
5

Me gustaría entender la semántica exacta del uso de "FOR UPDATE" en relación con "JOIN". ¿Simplemente bloquea todas las filas que se utilizaron efectivamente para generar el resultado final? ¿Hace algo más?Semántica SQL para "FOR UPDATE" & "JOIN"

De este tema:

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

entiendo que hay algunas diferencias importantes entre las implementaciones de bases de datos. Sin embargo, no estoy seguro. Me interesa el comportamiento de cualquier RDBMS popular, sin embargo, PostgreSQL en particular.

Respuesta

10

Lo tienes correcto. En un "SELECCIONAR PARA ACTUALIZAR" con un JOIN, las filas que contribuyen a las filas devueltas se bloquearán. Puede cambiar este comportamiento agregando un "OF table_a" a "FOR UPDATE" para que solo se bloqueen las filas de table_a. Puede leer más sobre esto en la documentación de Postgres aquí:

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

+1

Oh, esto 'DE table_xyz' es una gran noticia y me va a ayudar mucho. Muchas gracias – julkiewicz