数据库幻读场景

1.A事务去查询一条不存在的记录

2.B事务插入这条记录

3.此时记录对于A是不可见的,此时A去更新这条记录(更新语句是当前读

4.A再去查询可以查询到了,因为新版本数据的事务id改为了A的,A就可以访问到了

这样就是幻读

### 回答1: 针对脏读场景,假设一个事务正在对一个数据进行修改,而另一个事务突然读取了这个数据并进行了操作,由于第一个事务的修改还未提交,那么另一个事务读取到的数据是不完整的、不准确的,这就是脏读。 针对幻读场景,假设一个事务正在读取一个数据集合,而另一个事务突然对这个数据集合进行了修改,那么在第一个事务再次读取这个数据集合时,就会发现出现了新的数据,这就是幻读。 ### 回答2: 脏读和幻读都是数据库中的并发控制问题,因为多个事务同时操作一个数据库时可能会出现一些不一致的情况。 脏读是指一个事务读取了另一个事务尚未提交的数据。举个例子,有两个事务A和事务B。事务A首先读取某一行的数据,此时发生了一个中断,然后事务B对这一行进行了修改并提交。随后事务A继续进行,按照最初读取的数据进行操作,导致读到了事务B修改后的脏数据。 幻读是指一个事务在读取某一范围的数据时,另一个事务插入了新的数据,导致第一个事务获得的结果集发生了变化。举个例子,事务A读取某一表中所有年龄小于等于20岁的行,得到了结果集。而在此时事务B往该表中插入一个新的年龄小于等于20岁的行,事务A再次读取同一范围的数据却发现结果集中出现了新插入的行,导致幻读的问题。 为了解决脏读和幻读的问题,可以借助数据库中的各种隔离级别来控制并发访问。例如,在读未提交的隔离级别下(最低级别),可以允许脏读的产生;在可重复读或串行化的隔离级别下(较高级别),事务的读操作会加上锁,从而避免了脏读和幻读的问题。但是,较高的隔离级别可能会导致并发性能下降,需要根据具体的场景和需求选择合适的隔离级别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值