`

正确理解脏读、不可重复读、幻读

阅读更多

1、脏读 (dirty read)

A事务读到B事务尚未提交的数据,就是脏读。

例如:

事务A更新某条数据

事务B读取该条数据

事务A commit

事务B commit

这种情况下事务B读的就是脏数据。

 

 

2、不可重复读 (unrepeatable read)

在同一个事务中,再次读取数据时(就是你的select操作),所读取的数据,和第1次读取的数据,不一样了。就是不可重复读。

例如:

事务A读取数据

事务B更新数据

事务B commit

事务A再次读取数据

这时A两次读取的数据就不一样了,也就是不可重复读。

 

3、幻读  (phantom read

事务A读取与搜索条件相匹配的若干行。事务B以插入或删除行等方式来修改事务A的结果集,然后再提交。

例如:

 事务A查询到了5条数据

事务B更新了相关联的表

事务B commit

事务A再次查询只得到了4条数据

这次事务A就是幻读了

 

 

分享到:
评论

相关推荐

    并发控制指的是当多个用户同时更新行时,用于保护数据库完整性的各种技术。并发机制不正确可能导致脏读、幻读和不可重复读等此类问题。

    并发控制的主要目标是避免事务之间的冲突,防止出现诸如脏读、不可重复读和幻读等问题。 脏读发生在事务T1读取了事务T2还未提交的修改数据,然后T2因为某种原因回滚了更改。在这种情况下,T1读到的数据实际上是错误...

    .NET中 关于脏读 不可重复读与幻读的代码示例

    尤其是当多个事务并发执行时,可能会遇到一系列的问题,其中就包括脏读、不可重复读和幻读。理解这些问题并知道如何避免它们对于编写健壮的数据库应用程序至关重要。 首先,让我们定义一下这三种问题的含义: 1. ...

    mysql可重复读和幻读的理解

    这与不可重复读的主要区别在于,不可重复读关注的是已存在的行的修改,而幻读则涉及新行的插入。 MySQL文档指出,幻读只在可重复读、一致性读(Consistent Read,即不锁定读)和读未提交的隔离级别下可能发生,并且...

    20.幻读是什么幻读有什么问题?1

    - 串行化(Serializable):最严格的隔离级别,通过锁定所有涉及的行,确保事务按顺序执行,避免脏读、不可重复读和幻读,但可能造成较高的并发性能损失。 在MySQL中,可以通过设置事务隔离级别或使用特定的查询...

    MySQL-并发事务问题及解决方案.docx

    本文将深入探讨并发事务带来的三种主要问题:脏读、不可重复读和幻读,以及MySQL如何通过事务隔离级别来解决这些问题。 首先,脏读(Dirty Reads)指的是一个事务读取到了另一个未提交事务的数据,导致数据的不一致...

    SQL SERVER中事务隔离级别的实例分析.pdf

    事务在执行时可能会遇到多种并发问题,如脏读、不可重复读和幻读,这些问题都会影响数据的正确性和系统的稳定性。SQL Server 2000提供了四种不同的事务隔离级别来解决这些问题,以适应不同应用的需求。 1. **脏读...

    行业-50 听起来很恐怖的数据库幻读,到底是个什么奇葩问题?l.rar

    幻读与另一种类似的现象——不可重复读(Non-repeatable Read)有所不同。不可重复读指的是在同一个事务内,多次读取同一数据块时,数据会发生变化,可能是其他事务修改或删除了原有数据。而幻读则是新插入的数据在...

    数据库隔离级别扫描.pdf

    在这种情况下,可能会发生脏读、不可重复读和幻读。脏读是指一个事务读取到了另一个事务未提交的修改,这些数据可能最终会被回滚,因此是不正确的。不可重复读则意味着在同一事务内多次读取相同数据,结果可能不同,...

    MySQL事务的基础学习以及心得分享

    - READ UNCOMMITTED(读未提交):允许读取未提交的数据,可能导致脏读、不可重复读和幻读。 - READ COMMITTED(读已提交):每次读取的都是已经提交的数据,防止脏读,但可能有不可重复读和幻读。 - REPEATABLE ...

    MySQL事务隔离级别

    这可能导致脏读、不可重复读和幻读问题。脏读是指一个事务读取了另一个事务未提交的修改,而这些修改可能随后被回滚。虽然这个级别提供了最高的并发性能,但由于数据的不稳定,通常不建议在生产环境中使用。 2. **...

    SQL事务

    1. **读未提交(Read Uncommitted)**:这是最低的隔离级别,允许事务读取其他未提交的事务数据,可能导致脏读、不可重复读和幻读问题。 2. **读已提交(Read Committed)**:每个事务只能看到其他已经提交的事务...

    BAT面试必问的20道高频数据库问题解析1

    - **读未提交(read-uncommitted)**:允许脏读和不可重复读、幻读。 - **读已提交(read-committed)**:禁止脏读,但可能发生不可重复读和幻读。 - **可重复读(repeatable-read)**:MySQL默认隔离级别,禁止...

    编写可读代码的艺术-完整版(带书签)_可读代码_

    《编写可读代码的艺术》是...《编写可读代码的艺术》深入浅出地探讨了这些主题,旨在帮助开发者提升代码质量,打造更易于理解和维护的软件。通过实践这些原则,我们可以成为更好的程序员,为团队和项目带来更大的价值。

    行业-57 停一停脚步:梳理一下数据库的多事务并发运行的隔离机制l.rar

    4. **串行化(Serializable)**:最严格的隔离级别,所有事务按顺序执行,可以完全避免脏读、不可重复读和幻读,但性能最低,因为事务必须等待前面的事务完成。 数据库系统通过多种技术实现这些隔离级别,如锁定...

    Spring事务详解

    - ISOLATION_READ_UNCOMMITTED:最低隔离级别,允许脏读、不可重复读和幻读。 - ISOLATION_READ_COMMITTED:防止脏读,但可能产生不可重复读和幻读。 - ISOLATION_REPEATABLE_READ:防止脏读和不可重复读,但可能...

    SQL Server 2002中的事务隔离级别.pdf

    4. Serializable(串行化):最高级别的隔离,完全避免了脏读、不可重复读和幻读,但并发性能最低,因为事务会加锁整个区间,可能导致其他事务等待。 设置SQL Server的事务隔离级别可以使用`SET TRANSACTION ...

    事务并发的可能问题与其解决方案.docx

    并发事务可能会引发多种问题,如更新丢失、脏读、不可重复读和幻读,这些问题都需要通过适当的事务隔离级别和解决方案来处理。 更新丢失分为第一类更新丢失和第二类更新丢失。前者发生在事务撤销时,其对数据的修改...

    Mysql事务隔离级别之读提交详解

    然而,它并未解决不可重复读和幻读问题。不可重复读是指在一个事务内,多次读取同一数据集时,结果不同,因为其他事务在此期间对数据进行了修改并提交。幻读则发生在当一个事务按某种条件(如主键或索引)进行查询,...

    VIP-深入理解Mysql锁与事务隔离级别1

    4. **串行化(SERIALIZABLE)**:最严格的隔离级别,防止脏读、不可重复读和幻读,但代价是并发度极低,所有事务按顺序执行。 总结来说,锁和事务隔离级别是MySQL保证数据一致性、防止并发操作引发问题的重要工具。...

Global site tag (gtag.js) - Google Analytics