【发布时间】:2015-07-16 21:58:30
【问题描述】:
我在 postgres 中有以下查询。
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;
我了解第二个查询会在特定行上锁定(在事务下运行时)。没有其他查询将能够访问 直到事务提交为止。
在事务下运行时,第一个查询是否也锁定了行?
谢谢
【问题讨论】:
标签: database postgresql sql-update locking