Mysql 事务隔离级别

事务带来的问题

  • 脏读:当前事务读取到其他事务未提交的数据。
  • 不可重复读:事务两次读到的数据不一致。
  • 幻读:一个事务读取某个范围内的数据,另一个事务在这个范围内增加了一条数据,先前的事务又读取了该范围,结果读到了新的数据,这个数据就叫幻行。

隔离级别

隔离级别 脏读 不可重复读 幻读
READ UNCOMMITED(未提交读) Yes Yes Yes
READ COMMITED(提交读) No Yes Yes
REPEATABLE READ(可重复读) No No Yes
SERIALIZABLE(可串行化) No No No

介绍

READ UNCOMMITED(未提交读)

在这个级别下,事务的修改对其他事务是可见的,不管该事务有没有提交。脏读、不可重复读和幻读都会发生。

READ COMMITED(提交读)

在这个级别下,只读其他事务提交后的数据,但可能两次查询得到不一样的结果,可以解决脏读的问题。

REPEATABLE READ(可重复读)

在这个级别下,满足同一事务多次读取数据一致,只会出现幻读。Mysql 的存储引擎 InnoDB 使用 next key locking 解决幻读的问题。注意这是 Mysql 默认的隔离级别。

SERIALIZABLE(可串行化)

在这个级别下,事务串行执行,它会对所有读到的数据加锁,所以没有任何数据不一致的问题,因此性能也很差。

参考

高性能MySQL

posted @   hligy  阅读(95)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示