MySql事务隔离级别
事务并发执行会带来的一些问题:
脏读:事务A读到另一个事务B未提交的数据,这个数据可能是不正确的,因为事务B的操作可能会失败回滚,那么事务A所读到的就是错误的脏数据。
不可重复读: 如果一个事务可以读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值,那就意味着发生了不可重复读。
幻读:如果一个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来,那就意味着发生了幻读。
SQL标准的四种隔离级别
READ UNCOMMITTED:读未提交
A开启事务,读到了B事务未提交的数据 -------存在脏读的现象
READ COMMITTED:读已提交
A开启事务,B事务提交新增数据
A可以读取到 ---------存在幻读现象,两次读取的数据条目不同
B事务修改数据提交
A可以读取到 ---------多次读取,数据不一致,存在不可重复读现象
REPEATABLE READ:可重复读
A开启事务,B事务更新数据提交
A读取到和之前一样的数据 --------可重复读
B事务新增数据提交
A读取的数据条目不变 -----出现幻读现象。
SERIALIZABLE:可串行化
解决了所有问题,但是效率很低
查看当前会话隔离级别
select @@transaction_isolation;
查看系统隔离级别
select @@global.transaction_isolation;
设置隔离级别:SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
其中,SESSION 和 GLOBAL 关键字用来指定修改的事务隔离级别的范围:
SESSION:表示修改的事务隔离级别将应用于当前 session(当前 cmd 窗口)内的所有事务;
GLOBAL:表示修改的事务隔离级别将应用于所有 session(全局)中的所有事务,且当前已经存在的 session 不受影响;
如果省略 SESSION 和 GLOBAL,表示修改的事务隔离级别将应用于当前 session 内的下一个还未开始的事务。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具