2011-08-09 45 views
5

Tôi muốn hiểu ngữ nghĩa chính xác của việc sử dụng "FOR UPDATE" cùng với "JOIN". Liệu nó có khóa tất cả các hàng được sử dụng hiệu quả để xây dựng kết quả cuối cùng không? Nó có làm gì khác không?Ngữ nghĩa SQL cho "FOR UPDATE" & "JOIN"

Từ chủ đề này:

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

Tôi hiểu có một số khác biệt quan trọng giữa việc triển khai cơ sở dữ liệu. Tuy nhiên tôi không chắc chắn. Tôi quan tâm đến hành vi của bất kỳ RDBMS phổ biến trên mạng, tuy nhiên đặc biệt là PostgreSQL.

Trả lời

10

Bạn đã chính xác. Trong một "SELECT FOR UPDATE" với JOIN, bất kỳ hàng nào đóng góp cho các hàng trả về sẽ bị khóa. Bạn có thể thay đổi hành vi này bằng cách thêm "OF table_a" vào "FOR UPDATE" để chỉ các hàng từ table_a sẽ bị khóa. Bạn có thể đọc thêm về điều này trong các tài liệu Postgres đây:

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

+1

Oh, 'này HÀNH table_xyz' là tin tuyệt vời và sẽ giúp tôi rất nhiều. Cảm ơn nhiều – julkiewicz