当前位置: 首页 > 知识库问答 >
问题:

选择使用已读提交,请澄清

柳景胜
2023-03-14

关于Read Committed隔离级别的文档说

提交读取是PostgreSQL中的默认隔离级别。当事务使用此隔离级别时,选择查询(没有FOR UPDATE/SHARE子句)只能看到查询开始前提交的数据;在查询执行期间,它不会看到未提交的数据或由并发事务提交的更改。实际上,SELECT查询看到的是查询开始运行时的数据库快照。但是,SELECT确实看到了以前在自己的事务中执行的更新的效果,即使它们尚未提交。还要注意,如果在第一个SELECT命令执行期间其他事务提交了更改,则两个连续的SELECT命令可能会看到不同的数据,即使它们在单个事务中。

最后一句让我很困惑,是什么意思?如果我在一个事务中没有2个选择,而是有3个选择,还有一些计算没有使用DML,那该怎么办?每个select都会在每个查询开始时看到自己的快照?

共有1个答案

魏松
2023-03-14

最后一句指的就是这种情况。

假设有一个表<code>foo</code>在两个事务开始之前包含一行:

Transaction 1            Transaction 2
-------------------------------------------------------
begin transaction;
select *
from foo;
--> returns 1 rows
                         begin transaction;
                         insert into foo values (2);
                         commit;
select * 
from foo;
--> now returns 2 rows

(请注意,事务 1 在第一次选择后尚未提交)

如果不想在事务1中看到新的(提交的)行,则需要使用名为“可重复读取”的隔离级别。这个名称源于这样一个事实,即您可以重复相同的查询,并且您将重复看到相同的数据。

 类似资料:
  • 嘿,伙计们,在一个多部分的问题上遇到了一些麻烦。我试图得到一个石头剪刀布游戏,当我试图测试代码使用游戏方法我必须输入我的选择一遍又一遍,然后它只是打印出平局,你是赢家,电脑是赢家一遍又一遍,有人能告诉我我哪里出错了吗?

  • 问题内容: 考虑: 提交表单时,如何确保下拉列表中的选定值保持选中状态?此表单位于WordPress(PHP)内部。 问题答案: 为了避免许多if-else结构,让JavaScript自动完成:

  • 我有一个简单的使用Ajax从json文件动态生成的select选项,但我没有做到的是在提交表单后将以前选择的选项保持为选中状态。用发送到JS的PHP变量尝试了这一点,但我找不到在脚本标记中使用PHP代码的方法,并且用PHP重复所有内容都很难看。有什么想法吗? 我的PHP AJAX代码: 我的JSON文件:

  • 我不熟悉Hibernate,并且继承了使用它的代码库。未定义自动提交,因此默认情况下为false。不过,基于我提出的其他问题,答案表明,最佳做法是对代码进行标定,以便在开始事务时始终应该提交()或回滚()(多亏了Apostolos)。该代码库使用以下代码中的格式来表示Select语句。我打算将任何新代码正确地划分为commit()或rollback(),但我只是好奇使用下面的模型会产生什么后果。应

  • 我们有一个Kafka主题,从事务性生产者那里读取消息。我们希望将kafka connect消费者设置为只读提交的消息。 由于我是Kafka的新手,我需要这里的专家帮助我设置它。根据我最初的研究,我明白我需要在我们的kafka属性中设置isolation.level=read_committed。 现在我有以下问题 这是我指的正确的财产吗 我们在/confluent/bin文件夹中放置了Kafka外

  • 目前我正在研究聊天服务器/客户端项目。我正在努力使用 select 处理多个请求,我的服务器脚本使用 select 模块,但客户端脚本没有。结果是,当用户输入消息时,其他客户端必须编写自己的消息才能通读对话。我已经在网上搜索了很多示例,但只能找到带有 sys.stdin 的代码片段,这不是我想要的。 我很高兴收到任何指示/解释。 服务器代码: 客户端代码: