首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取行锁的更新

获取行锁的更新
EN

Stack Overflow用户
提问于 2015-07-16 21:58:30
回答 1查看 51关注 0票数 1

我在postgres中有以下查询。

代码语言:javascript
复制
CREATE SCHEMA s;
CREATE TABLE s.t1 (
    "id1" Bigint,
    "id2" Bigint,
    "id3" Boolean DEFAULT false NOT NULL,
    CONSTRAINT "pk1" PRIMARY KEY (id1)
)    
WITH(OIDS=FALSE);

INSERT INTO s.t1 (id1, id2, id3) VALUES (1, 22, true);
INSERT INTO s.t1 (id1, id2) VALUES (2, 22);
INSERT INTO s.t1 (id1, id2) VALUES (3, 33);

SELECT EXISTS (SELECT 1 FROM s.t1 WHERE id2 = 22  and id3 = true FOR UPDATE); /* Does it take a lock on the row. */

SELECT id3 FROM s.t1 WHERE id2 = 22  and id3 = true FOR UPDATE; /* Takes a lock on the row. */

DROP SCHEMA s CASCADE; 

我了解到,第二个查询在特定的行上使用一个锁(在事务下运行时)。在事务提交之前,任何其他查询都无法访问该行。

在事务下运行时,第一个查询是否也会对行进行锁定?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 22:35:10

代码语言:javascript
复制
SELECT EXISTS (SELECT 1 FROM s.t1 WHERE id2 = 22  and id3 = true FOR UPDATE);
/* Does it take a lock on the row. */

是。查询检索的所有行都被锁定。无论以何种形式存在,以及查询是否返回它们都不重要。

如果子查询锁定了一些行,则外部查询可能会减少已锁定的行数(如果减少检索到的行数)。在这种情况下,外部查询将锁定的行数减少到一行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31465235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档