Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用行锁更新_Database_Postgresql_Sql Update_Locking - Fatal编程技术网

Database 使用行锁更新

Database 使用行锁更新,database,postgresql,sql-update,locking,Database,Postgresql,Sql Update,Locking,我在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);

我在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; 
我知道第二个查询(在事务下运行时)在特定行上使用锁。没有其他查询将能够访问 直到事务提交为止

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

谢谢

对。查询检索到的所有行都被锁定。查询以何种形式返回以及是否返回它们并不重要

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

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