事务的隔离级别

事务的隔离级别是数据库管理系统(DBMS)中用于控制并发事务之间如何相互影响的机制。不同的隔离级别提供了不同程度的并发性和数据一致性保证。下面将讲解四种主要的事务隔离级别,按低到高开始说起。

一、读未提交(READ_UNCOMMITTED):

1.最低的隔离级别。

2.允许事务读取另一个事务尚未提交的数据。这可能导致读取到不一致或"脏"的数据,因为其他事务可能会回滚其更改。

3.由于没有锁机制或同步操作来防止脏读,因此该级别可能会提高并发性能,但数据一致性无法得到保证。

4.在实际应用中,很少使用此隔离级别,因为它可能导致数据错误。

事务读取:不加锁

事务写入:加写锁

解决问题:脏写

存在问题:脏读,不可重复读、幻读。

二、读提交(READ_COMMITTED):

1.允许事务读取另一个事务已经提交的数据。

2.防止了脏读,因为每个事务只能看到已经提交的更改。

3.但是,它允许不可重复读和幻读。即,在同一个事务中,如果另一个事务对同一数据进行了修改或插入新数据,那么该事务在后续读取时可能会得到不同的结果。

4.这是一个常用的隔离级别,因为它提供了相对较好的数据一致性和并发性能之间的平衡。

事务读取:加读锁(每次select完成都会释放读锁)

事务写入:加写锁

解决问题:脏读

存在问题:不可重复读、幻读

三、可重复读(REPEATABLE_READ):

1.保证在同一个事务中多次读取同一数据时,得到的结果是一致的。

2.防止了脏读和不可重复读。但是,它仍然可能允许幻读(取决于具体的数据库实现)。

3.在某些数据库系统中,如MySQL的InnoDB存储引擎,通过使用间隙锁(gap locks)等技术来防止幻读,从而将可重复读提升到了更高的数据一致性水平。

4.这个隔离级别在需要确保数据一致性但又不想引入过多并发开销的场景中很有用。

事务读取:加读锁(每次select完不会释放锁,而是事务结束后才释放)(如果是Mysql的innodb还会加间隙锁)

事务写入:加写锁

解决问题:脏写、脏读、不可重复读、幻读(如果是innodb则已解决)

存在问题:幻读(如果是Mysql的innodb则不存在)。

四、串行化(SERIALIZABLE):

1.最高的隔离级别。

2.通过强制事务按顺序执行来防止脏读、不可重复读和幻读。

3.它提供了最强的数据一致性保证,但可能会显著降低并发性能,因为事务需要等待其他事务完成才能继续执行。

4.在可串行化级别下,数据库系统通常会使用锁机制(如表级锁或行级锁)或时间戳排序来确保事务的串行化执行。

5.这个隔离级别在需要高度数据一致性的场景中很有用,但可能会引入较大的性能开销。

相关推荐
热爱专研AI的学妹12 分钟前
【搭建工作流教程】使用数眼智能 API 搭建 AI 智能体工作流教程(含可视化流程图)
大数据·数据库·人工智能·python·ai·语言模型·流程图
DBA小马哥28 分钟前
国产数据库加速替代Oracle:聚焦信创背景下的平滑迁移与性能突破
数据库·oracle
漂亮的小碎步丶38 分钟前
【7】SQL性能优化实践:EXPLAIN解读+慢查询分析+移动代理商结算案例
数据库·sql性能优化
小股虫1 小时前
从Tair虚拟桶到数据库分库分表:解耦逻辑与物理的架构艺术
数据库·架构·解耦
车载测试工程师1 小时前
CAPL学习-CAN相关函数-CANdb API类函数
网络·数据库·学习·capl·canoe
默 语1 小时前
RAG实战:用Java+向量数据库打造智能问答系统
java·开发语言·数据库
北极糊的狐1 小时前
若依报错org.springframework.dao.DataIntegrityViolationException
数据库·mysql
dazhong20121 小时前
Mybatis 敏感数据加解密插件完整实现方案
java·数据库·mybatis
薛晓刚1 小时前
2025 年度个人回顾总结
数据库
TDengine (老段)1 小时前
TDengine 在智能制造领域的应用实践
java·大数据·数据库·制造·时序数据库·tdengine·涛思数据