MySQL InnoDB默认隔离级别为可重复读,可通过SET SESSION或SET GLOBAL设置会话或全局级别,也可在配置文件中定义transaction-isolation以持久化配置,四种级别分别为读未提交、读已提交、可重复读和串行化,应根据业务需求选择以平衡一致性与性能。

MySQL InnoDB 的事务隔离级别可以通过全局或会话级别的配置进行设置,用于控制事务之间的可见性和并发行为。默认情况下,InnoDB 使用的是 可重复读(REPEATABLE READ) 隔离级别。根据实际业务需求,可以调整为其他级别,如读已提交(READ COMMITTED)、读未提交(READ UNCOMMITTED)或串行化(SERIALIZABLE)。
查看当前事务隔离级别
在设置之前,先确认当前的隔离级别:
— 查看会话级别隔离级别
SELECT @@tx_isolation;
— 查看全局隔离级别
SELECT @@global.tx_isolation;
在较新版本的 MySQL(8.0+)中,该变量已更改为 transaction_isolation,因此应使用:
SELECT @@transaction_isolation;
SELECT @@global.transaction_isolation;
设置事务隔离级别
MySQL 支持四种标准的事务隔离级别:
READ UNCOMMITTED(读未提交)READ COMMITTED(读已提交)REPEATABLE READ(可重复读)SERIALIZABLE(串行化)
可以通过以下方式设置:
1. 设置会话级别隔离级别
仅对当前连接生效,不影响其他会话:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
例如,将当前会话设为“读已提交”:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
2. 设置全局隔离级别
影响所有后续新建立的连接,但不会改变当前已存在的会话:
Ai Mailer
使用Ai Mailer轻松制作电子邮件
49 查看详情
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
该设置会持久化到数据库重启(除非配置文件中另有定义),建议同时修改配置文件以确保永久生效。
3. 在配置文件中设置默认隔离级别
编辑 MySQL 配置文件(通常是 my.cnf 或 my.ini),在 [mysqld] 段落下添加:
[mysqld]
transaction-isolation = READ-COMMITTED
支持的值包括:
READ-UNCOMMITTEDREAD-COMMITTEDREPEATABLE-READSERIALIZABLE
修改后需重启 MySQL 服务使配置生效。
常见应用场景建议
不同隔离级别适用于不同场景:
READ COMMITTED:适用于希望避免脏读,且能接受不可重复读的场景,如 OLTP 系统中频繁更新的数据查询。REPEATABLE READ:MySQL 默认级别,适合大多数应用,能防止脏读和不可重复读,InnoDB 通过 MVCC 机制减少锁争用。SERIALIZABLE:最高隔离级别,强制事务串行执行,避免幻读,但性能较低,适用于数据一致性要求极高的场景。READ UNCOMMITTED:最低级别,可能读到未提交数据,一般不推荐使用。
基本上就这些。设置时注意区分会话与全局范围,生产环境建议结合业务逻辑谨慎选择隔离级别,避免并发问题或性能瓶颈。
以上就是mysql innodb事务隔离级别如何设置_mysql事务隔离配置方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1009234.html
微信扫一扫
支付宝扫一扫