postgresql事务中的表状态是如何工作的?

vnjpjtjt  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(320)

例如,如果调用某个执行批处理作业的过程,则需要10分钟。它反过来访问某个表。如果在运行过程(事务)中访问的表在这10分钟内更新,会发生什么?事务将忽略这些更改并在过程调用时保持表的状态?示例:用户表

|user_id|some_value|
|-------|----------|
|      1|       213|
|      3|       444|

-- and so on

如果用户id=3的某个\u值更改为1,但事务仍在运行,逐行处理用户表,并且在某个\u值更新时未处理id=1的用户,则过程(事务)中的值是什么?1还是444?

efzxgjgh

efzxgjgh1#

一般来说,事务总是能看到自己的文字:如果您运行 update mytable set some_value=1 where user_id=3 只要此事务正在运行, select some_value from mytable where user_id=3 在此事务中返回1。但其他并发事务无法看到此“挂起”更新。
如果此事务通过回滚结束,则没有人能够看到此值:不是同一会话中的新事务,也不是另一会话中的另一事务。
如果此事务以提交结束,则所有其他事务都将看到此新值,无论它们是在另一个会话中运行还是在同一个会话中运行。
这假设默认事务隔离级别为read committed。

相关问题