可重复读下的幻读

在事务执行过程中,另一个事务将新记录添加到正在读取的事务中时,会发生幻读(事务隔离级别为可重复读REPEATABLE-READ)。当执行SELECT … WHERE语句时未对where范围锁定,则可能会发生幻读。幻读是不可重复读的一种特殊情况 。当事务1重复执行SELECT … WHERE语句时,在这期间事务2执行INSERT语句插入了满足where条件的新记录。

t1表结构:有id和age两个字段。

事务1

事务2

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MySQL中的不可重复读幻读是两种并发控制问题。 不可重复读(Non-repeatable Read)是指在一个事务中,多次读取同一数据,在这个事务还没有结束时,另外一个事务也修改了这个数据,导致多次读取的结果不一致。换句话说,一个事务在执行期间,另一个事务对数据进行了修改,导致当前事务多次读取的结果不同。 幻读(Phantom Read)是指在一个事务中,多次查询同一范围的数据,在这个事务还没有结束时,另外一个事务插入了符合同一范围的数据,导致多次查询的结果不一致。换句话说,一个事务在执行期间,另一个事务对数据进行了插入或删除操作,导致当前事务多次查询的结果不同。 为了解决不可重复读幻读的问题,MySQL提供了不同的隔离级别。隔离级别定义了一个事务对其他事务的可见性和影响范围。MySQL支持四个隔离级别: 1. 读未提交(Read Uncommitted):最低级别,事务可以读取到其他事务未提交的数据,可能出现脏读、不可重复读幻读问题。 2. 读已提交(Read Committed):默认级别,事务只能读取到其他事务已提交的数据,可以避免脏读,但仍可能出现可重复读幻读问题。 3. 可重复读(Repeatable Read):事务在执行期间,多次读取同一数据时返回一致的结果,可以避免不可重复读,但仍可能出现幻读问题。 4. 串行化(Serializable):最高级别,事务依次执行,避免了脏读、不可重复读幻读问题,但牺牲了并发性能。 开发者可以根据具体需求选择合适的隔离级别来解决不可重复读幻读问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值