《高性能MySQL》里有这么一段:
那么,假设有如下场景,查询C应当会读到什么结果?
A出对数据的更新,产生了一个新行m(版本号1),一个旧行(版本号1,删除标识1).B之前开始事务,系统版本号+1,为2,这是B的更新,产生了新行n(版本号2)和旧行m(删除标识2).C之前开始事务,系统版本号+1,为3。此时,C查询到新行n,其删除版本未定义,且其版本小于当前事务的版本号3。D可能失败,事务(版本号为2的)产生回滚。这是脏读吗?如何正确理解那一段文字?哪里理解错了?
- 大小: 125.5 KB
- 大小: 13.1 KB
分享到:
相关推荐
### 脏读、不可重复读与幻读详解 #### 一、概念解析 在数据库管理系统(DBMS)中,为了确保数据的一致性和完整性,引入了事务(Transaction)的概念。事务通常具备四个特性:原子性(Atomicity)、一致性(Consistency)、...
在事务并发处理中,存在三种类型的问题:脏读、不可重复读和虚读。 脏读(Dirty Read)是指事务读取了另一个事务未提交的数据。如果第一个事务回滚了修改操作,那么第二个事务读取的数据就可以看作是从未存在过的。...
标题和描述中提到的核心知识点是关于数据库事务并发控制中可能出现的问题,特别是脏写(Dirty Write)和脏读(Dirty Read)两种现象。这些知识点主要涉及数据库事务的隔离级别,事务的ACID属性(原子性、一致性、...
当多个事务并发运行时,可能会出现脏写(Dirty Write)和脏读(Dirty Read)的问题,这是并发控制中的两个主要问题。本文将深入探讨这两个概念以及它们产生的原因。 脏写是指一个事务修改了另一个事务尚未提交的...
数据并发的问题 (脏读、不可重复读、幻象读)和数据库锁机制
1. **读未提交**:在这一级别,事务可以读到其他事务未提交的更改,这可能导致脏读(Dirty Reads),即事务读取到的数据可能是临时的、错误的。 2. **读已提交**:在此级别,事务只能看到其他事务已经提交的更改。...
要深入理解不可重复读,我们需要先回顾脏读(Dirty Read)和脏写(Dirty Write)两个概念。脏读是指一个事务读取了另一个事务未提交的数据。如果后一个事务回滚了,那么前一个事务读到的数据就是无效的,这种现象在...
并发控制的主要目标是避免事务之间的冲突,防止出现诸如脏读、不可重复读和幻读等问题。 脏读发生在事务T1读取了事务T2还未提交的修改数据,然后T2因为某种原因回滚了更改。在这种情况下,T1读到的数据实际上是错误...
2. 读提交(Read Committed):仅能读取已提交的数据,避免脏读,但仍可能遇到不可重复读和幻读。 3. 可重复读(Repeated Read):保证同一事务内的多次读取返回相同数据,防止不可重复读,但幻读仍可能发生,如...
尤其是当多个事务并发执行时,可能会遇到一系列的问题,其中就包括脏读、不可重复读和幻读。理解这些问题并知道如何避免它们对于编写健壮的数据库应用程序至关重要。 首先,让我们定义一下这三种问题的含义: 1. ...
为了深入理解幻读,我们首先要清楚几个基础概念:脏写、脏读、不可重复读。 脏写是指两个并发事务同时对同一数据项进行修改,一个事务还没有提交,另一个事务也修改了这个数据项,随后一个事务回滚,导致另一个事务...
数据库隔离级别与脏读、幻读的深入解析
- 串行化(Serializable):最严格的隔离级别,通过锁定所有涉及的行,确保事务按顺序执行,避免脏读、不可重复读和幻读,但可能造成较高的并发性能损失。 在MySQL中,可以通过设置事务隔离级别或使用特定的查询...
该资源详细介绍了MySQL数据库中的事务隔离级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable),并讨论了这些级别如何影响脏读、不可重复读...
数据库的脏读、不可重复读、幻读都和事务的隔离性有关。所以先了解一下事务的4大特性。 事务的4大特性(ACID): 1、原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么...
常见的隔离级别有读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。较高的隔离级别能提供更强的保护,但也可能牺牲并发性能。例如,串行化级别...
数据库事物 1.事物的四大特性(ACID) ...什么是脏读?幻读?不可重复读? ** 脏读:某个事物已更新一份数据,另一个事物在此时获取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事物所读取的数据据就会是
有关Mysql之前有单独写过几篇文章•一文详解脏读、不可重复读、幻读•一文详解MySQL的锁机制•手把手教你分析解决MySQL死锁问题•看一遍就懂:MVCC原理详解•MySQL索引经典15问!之所以单独写,是因为这几块内容比较...
脏读可导致同一记录得到两个版本,或是完全地丢失一条记录。在同一事务中多次重新运行同一查询后,可能会出现幻读。最近MongoDB登上了Reddit的头条,因为MongoDB的核心开发者DavidGlasser痛苦地认识到MongoDB默认会...