为了理解“为分享而选择”,我只是读了https://shiroyasha.io/selecting-for-share-and-update-in-postgresql.html。
我只想确认一下,如果我在没有事务的情况下进行“选择共享”,例如:
select * from table_a where id = 1 for share
由于事务只有这一条select语句,所以虽然“for share”获得了锁,但锁会立即被释放,大致相当于“no lock”,对吧?
为了理解“为分享而选择”,我只是读了https://shiroyasha.io/selecting-for-share-and-update-in-postgresql.html。
我只想确认一下,如果我在没有事务的情况下进行“选择共享”,例如:
select * from table_a where id = 1 for share
由于事务只有这一条select语句,所以虽然“for share”获得了锁,但锁会立即被释放,大致相当于“no lock”,对吧?
1条答案
按热度按时间bvpmtnay1#
确实,锁的持有时间不会超过语句的执行时间,因此它是无用的。但是,
SELECT ... FOR SHARE
会像修改其他行锁一样修改被锁定的行,从而导致写操作并阻塞所有并发修改,并且语句将获得一个事务ID。因此,您正在为行锁付出代价,而没有任何好处。