关于READ COMMITTED隔离级别下SUM查询与UPDATE交互的疑问
关于READ UNCOMMITTED与READ COMMITTED隔离级别的测试疑问
我用250万条记录测试了READ UNCOMMITTED和READ COMMITTED隔离级别,操作步骤如下:
- 在会话A中执行:
BEGIN; SELECT SUM(salary) FROM salaries;
- 在SUM执行完成前,立即在会话B中执行:
BEGIN; UPDATE salaries SET salary = 10000 WHERE emp_no = 250000; COMMIT;
测试结果
- 会话A使用READ UNCOMMITTED隔离级别时,结果包含UPDATE后的数值(符合预期)。
- 会话A使用READ COMMITTED隔离级别时,结果为UPDATE前的数值(存在困惑)。
疑问与待确认点
我原本认为READ UNCOMMITTED和READ COMMITTED的区别仅在于是否读取其他连接已COMMIT的变更,但此场景中UPDATE已提交,结果却不同。想确认:
- 只要隔离级别为READ COMMITTED或更严格级别,大SELECT执行期间的UPDATE等操作是否不会影响其结果?如果是,原因是什么?(毕竟当SELECT扫描到更新行时UPDATE已提交)
- 补充说明:若SELECT在UPDATE之后启动,即使是SERIALIZABLE隔离级别,会话A也能读取到更新后的数据。
测试数据来源:使用datacharmer的test_db测试数据集
内容的提问来源于stack exchange,提问作者akai
相关产品推荐
相关产品推荐

