数据库—事务隔离级别:不可重复读与幻读区别
·
在数据库事务隔离级别中,不可重复读和幻读是两种不同的现象,主要区别如下:
1. 不可重复读(Non-repeatable Read)
- 定义:同一事务内多次读取同一数据,结果不一致。
- 原因:其他事务在该事务执行期间修改或删除了该数据。
- 示例:
- 事务A读取某行数据。
- 事务B修改或删除了该行并提交。
- 事务A再次读取时,发现数据已变化或不存在。
2. 幻读(Phantom Read)
- 定义:同一事务内多次执行相同查询,返回的结果集不一致。
- 原因:其他事务在该事务执行期间插入了新数据。
- 示例:
- 事务A执行查询,返回一组数据。
- 事务B插入新数据并提交。
- 事务A再次执行相同查询,发现结果集中多了新数据。
关键区别
- 不可重复读:针对已存在数据的修改或删除。
- 幻读:针对新数据的插入。
隔离级别的影响
- 读已提交(Read Committed):避免脏读,但可能出现不可重复读和幻读。
- 可重复读(Repeatable Read):避免脏读和不可重复读,但可能出现幻读。
- 串行化(Serializable):避免脏读、不可重复读和幻读,但并发性能最差。
总结
- 不可重复读:同一数据多次读取结果不一致。
- 幻读:同一查询多次执行结果集不一致。
更多推荐
所有评论(0)