首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【赵渝强老师】MySQL的事务隔离级别

【赵渝强老师】MySQL的事务隔离级别

原创
作者头像
赵渝强老师
发布2025-10-10 11:48:31
发布2025-10-10 11:48:31
740
举报
文章被收录于专栏:MySQLMySQL

数据库允许多个客户端同时访问。当这些客户端并发访问数据库中同一部分的数据时,如果没有采取必要的隔离措施就容易造成并发一致性问题,从而破坏数据的完整性。考虑下图的场景:

在时间点1上,var的数值是100。客户端A在时间点2的时候更新了它的值为200,但没有提交事务。在时间点3的时候,客户端B读取到了客户端A还未提交的数值200。但在时间点4,客户端A执行了回滚操作。那么,对于客户端B来说,如果在时间点5再次读取数据,得到就应该是100。那么客户端B就有了数据不一致的问题。而造成问题的根本原因在,客户端B读取到了客户端A还没有提交的事务中的数据。

视频讲解如下:

为了解决数据在并发访问时,数据的一致性问题。MySQL数据库提供了四种事务的隔离级别,它们分别是:读未提交(READ-UNCOMMITTED)读已提交(READ-COMMITTED)可重复读(REPEATABLE-READ)可序列化读(SERIALIZABLE)。执行下面的语句可以得到MySQL默认的事务隔离级别是可重复读。

代码语言:sql
复制
mysql> show variables like '%isolation%';

# 输出的信息如下:
+-----------------------+-----------------+
| Variable_name         | Value           |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+

下面的语句将修改MySQL数据库的事务隔离级别为:READ UNCOMMITTED。

代码语言:sql
复制
mysql> set session transaction isolation level read uncommitted;

MySQL数据库在不同的事务隔离级别下会有不同的行为,从而在并发访问数据的时候会带来不同的问题。下表列举了在不同的事务隔离级别下,MySQL可能存在的不同问题。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档