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 内的下一个还未开始的事务。

posted @   地球屋的主人  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示