如何修改 MySQL 的数据库隔离级别:命令global、session/my.cnf中修改


MySQL 的事务隔离级别是数据库管理系统中非常重要的概念,它决定了事务之间的隔离程度,直接影响数据一致性和并发性能。MySQL 支持四种标准隔离级别(基于 SQL:92 标准):

  1. READ UNCOMMITTED(读未提交) :可能出现脏读。 2. READ COMMITTED(读已提交) :避免脏读,但可能出现不可重复读。 3. REPEATABLE READ(可重复读) :MySQL 的默认隔离级别,避免脏读和不可重复读,但可能出现幻读(InnoDB 通过 MVCC 和间隙锁部分解决)。 4. SERIALIZABLE(串行化):最高隔离级别,完全避免并发问题,但性能较低。

在 MySQL 中,可以通过配置或命令动态修改隔离级别,具体方法如下:

1. 查看当前隔离级别

在修改之前,先确认当前的隔离级别。可以通过以下 SQL 语句查看:

sql 复制代码
SELECT @@transaction_isolation;  -- MySQL 8.0 之前
SELECT @@tx_isolation;          -- MySQL 5.7 及更早版本

输出可能是 REPEATABLE-READ(默认值)等。

2. 修改隔离级别

MySQL 支持在全局级别和会话级别修改隔离级别。

(1) 修改会话级别的隔离级别

如果你只想在当前会话中更改隔离级别,可以使用以下命令:

sql 复制代码
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
  • SESSION 表示只对当前会话有效。 - 可替换的选项包括:READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE

修改后,可以再次运行 SELECT @@transaction_isolation; 验证是否生效。

(2) 修改全局级别的隔离级别

如果需要更改整个数据库的默认隔离级别,可以使用:

sql 复制代码
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
  • GLOBAL 表示对所有新连接生效,但已存在的连接不会受影响。 - 同样支持上述四种隔离级别。
(3) 通过配置文件修改(持久化)

为了让隔离级别在 MySQL 重启后仍然有效,可以修改配置文件(通常是 my.cnfmysqld.cnf)。在 [mysqld] 部分添加:

ini 复制代码
[mysqld]
transaction-isolation = READ-COMMITTED

保存后重启 MySQL 服务:

bash 复制代码
sudo systemctl restart mysql

注意:配置文件中的值需要使用连字符(-),而不是下划线(_)。

3. 验证修改效果

修改完成后,可以通过以下方式验证: - 开启两个会话窗口,分别执行事务,观察并发行为是否符合预期隔离级别。 - 比如在 READ UNCOMMITTED 下,一个事务的未提交更改在另一个事务中可见(脏读)。

4. 注意事项

  • 权限 :修改全局隔离级别需要 SUPER 权限。 - 存储引擎 :隔离级别主要适用于 InnoDB(MySQL 默认引擎),MyISAM 不支持事务和隔离级别。 - 性能与一致性权衡 :降低隔离级别(如 READ UNCOMMITTED)可能提升并发性能,但会牺牲数据一致性;提高隔离级别(如 SERIALIZABLE)则相反。

5. 面试加分点

如果这是面试复盘,可以补充一些扩展内容: - 为什么用 REPEATABLE READ 作为默认? InnoDB 通过多版本并发控制(MVCC)和间隙锁优化了幻读问题,兼顾性能和一致性。 - 实际场景举例:电商库存扣减可能需要更高的隔离级别(避免超卖),而日志查询可以用较低的隔离级别。

相关推荐
安然无虞5 小时前
31天Python入门——第10天:深入理解值传递·引用传递以及深浅拷贝问题
开发语言·后端·python·pyqt
餘yuqn5 小时前
activiti 项目运行时找不到数据表 ACT_GE_PROPERTY
服务器·后端·工作流引擎
binnnngo5 小时前
Spring Boot集成PageHelper:轻松实现数据库分页功能
数据库·spring boot·后端·mybatis·pagehelper
咖啡教室6 小时前
DDD四层架构和MVC三层架构的个人理解和学习笔记
后端·mvc·领域驱动设计
uhakadotcom6 小时前
Locust压力测试:轻松评估系统性能
后端·面试·github
一线大码6 小时前
解决不了问题,就解决提出问题的人
后端·程序员·sonarqube
小咕聊编程7 小时前
【含文档+PPT+源码】基于SpringBoot+Vue的贫困地区留守儿童关怀系统
vue.js·spring boot·后端
uhakadotcom7 小时前
Airflow 入门指南:轻松管理工作流
后端·面试·github
Linging_247 小时前
Springboot集成Debezium监听postgresql变更
java·spring boot·后端
AntBlack7 小时前
DataWorks 体验笔记 :MaxCompute 用 Python 对数据进行二次处理
大数据·后端·创业