在已提交读事务与可重复读事务中执行单个选择查询有啥区别?

Posted

技术标签:

【中文标题】在已提交读事务与可重复读事务中执行单个选择查询有啥区别?【英文标题】:What is the difference in executing a single select query in read committed versus repeatable read transaction?在已提交读事务与可重复读事务中执行单个选择查询有什么区别? 【发布时间】:2018-01-08 14:57:35 【问题描述】:

这个问题是从Refactor functions so they can be used within a CTE 衍生出来的。

问题很简单:在READ COMMITTEDREPEATABLE READ 事务中执行SELECT 查询有什么不同吗?我们假设事务中没有其他查询(甚至是“SELECT”查询)。所以事务只执行一个SELECT 查询。

【问题讨论】:

对于单个查询,没有没有区别。 @a_horse_with_no_name,直到提交未完成repeatable read 可能看起来更多资源。 【参考方案1】:

通常单个SELECT 语句不会有区别。

如果SELECT 语句调用用户定义的函数,这些函数本身发出多个 SQL 语句,则例外。

在这种情况下,REPEATABLE READ 将使所有这些 SQL 语句共享数据库的单个快照,而READ COMMITTED 将使每个 SQL 语句看到数据库的不同状态。

【讨论】:

以上是关于在已提交读事务与可重复读事务中执行单个选择查询有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

事务的隔离级别

Mysql--事务的隔离级别

1.3 REPEATABLE READ(可重复读)

什么是脏读,不可重复读,幻读

事务的四大特性&脏读幻读不可重复读的区别&事务的隔离级别

事务的隔离级别