SQL - SELECT...FOR UPDATE 和 UPDATE 在哪个上下文中起作用?

SQL - on which context do SELECT...FOR UPDATE and UPDATE work?

我想问一个关于数据上下文的问题,事务在哪些数据上下文中使用不同的命令进行操作。

SELECT...FOR UPDATE 和 UPDATE 在数据上下文方面有什么不同吗?

我的意思是:如果我运行以下交易(伪代码):

begin transaction;
select user for update where id=1;
update user set name="TOM" where id=1;
commit;

这实际上是将用户锁定在独占模式,因此其他事务无法以任何方式访问它,对吗?

事务提交时,写入数据,释放锁。

但是这些交易呢:

T1

begin transaction;
select user for update where id=1;
update user set name="TOM" where id=1;
select user where id=1; //BREAKPOINT
commit;

T2:

begin transaction;
update user set name="TOM" where id=1;
select user where id=1; //BREAKPOINT
commit;

我相信 BREAKPOINT 处的 SELECTs 将 return 更新的用户。如果是这样,为什么?

UPDATE 和 SELECT...FOR UPDATE 都将用户锁定在“真实”table 的独占模式中(table 从其他事务提交的数据),而更新 (name="TOM") 的实际内容仅对操作它的事务可见,直到事务被提交?

这是否意味着每个事务都在其自己的“上下文”中工作,该“上下文”包含其后续命令所做的更改?

在这种情况下,事务不能同时 运行 - 第一个事务,即 运行,将锁定 ID = 1 的记录。

他们没有自己的两个状态 - 只有一个事务可以工作并且应该看到自己的变化