首页 > 数据库技术 > 详细

MySQL的四种隔离级别介绍

时间:2021-05-10 00:02:16      阅读:29      评论:0      收藏:0      [点我收藏+]

当事务发生并发时处理的一些级别:

  1. 读未提交 (READ-UNCOMMITTED)最低级别,任何情况都无法保证

    当客户端A开启事务更改数据,就算没有提交事务,其他客户端查询到的也是A更改后的数据。当客户端A进行ROLLBACK时,其他客户端查看的则是没有更改的数据。

    这种级别会产生脏读的情况,因为其他客户端查看的数据都是跟着A走的,随时会变。

 

  2. 读已提交 (READ-COMMITTED)可避免脏读的发生。

    当客户端A开启事务更改数据,只要A不COMMIT。则无论A怎么更改,其他客户端看到的都是原来的数据,只有A提交了,其他客户端才会看到更改后的数据。

    避免了READ-UNCOMMITTED的脏读情况,但是又会造成不可重复读的情况,假如其他客户端查询了A正在事务中的数据并且用查到的数据又进行了其他操作,

    A又提交了事务,就会造成其他客户端拿到的数据不对,数据已经改变了。

 

  3. 可重复读(REPEATABLE-READ)可避免脏读、不可重复读的发生。 (如果不做设置的话,MySQL默认为当前级别)

    当客户端A与客户端B同时开启事务,A在事务里面做的添加或修改在B里面是看不到的,B看到的只有原本的数据,只有当A提交了并且B也结束了他的事务,才能看到A操作后的数据。

    A和B互不干扰,解决了脏读、不可重复读的问题。但会出现幻读的情况,在客户端B里面看就是莫名其妙的更改了或新增了A操作的数据。

 

  4. 串行化(SERIALIZABLE)可避免脏读、不可重复读、幻读的发生。

    当客户端A与客户端B一起开启事务,A对数据进行更新SQL语句会被锁住(卡住不动,不返回操作结果),当B结束事务的时候 A的SQL语句才会执行。

    SERIALIZABLE可解决以上三种隔离级别存在的问题,但是对并发的性能会变差,同时安全性会变高。

 

相关命令:

-- 查看数据库当前的隔离级别
select @@tx_isolation;
-- 设置数据库的隔离级别
set tx_isolation = 要设置的隔离级别SET SESSION tx_isolation = 要设置的隔离级别;

 

MySQL的四种隔离级别介绍

原文:https://www.cnblogs.com/qiyunhai/p/14749163.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!