一、Read Uncommitted 读取未提交内容

  比如事务A中产生了新的数据,事务B可以读到这些内容,而不会在意事务A的回滚等等策略。这种读取未提交内容的数据,也称之为脏读。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。

  此隔离级别很少应用于实际应用,一方面性能并不比其他级别好多少,另一方面容易导致数据的混乱。比如事务A进行回滚之后,事务B所读到的数据也被污染。

二、Read Committed 读取提交内容, 不可重复读

  这是大多数数据库系统默认的隔离级别,但不是 mysql 默认的。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。

  这种隔离级别也支持所谓的不可重复读。针对的是更新操作。

三、Repeatable Read 可重读

  这是mysql 默认的隔离级别,确保同一事务并发读取数据时,会看到相同的数据行。保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。

  对于并发处理的事务A、B,当A改变数据时,导致B的两次读取不一致,就好像发生了幻觉一样,这就叫幻读。

  不过理论上,会导致另外一个棘手的问题,幻读。针对的是 插入、删除操作。

四、Serlailize 可串行化

  最高的隔离级别,强制事务排序,使之不产生冲突。但是会导致大量的锁的竞争和超时现象。

五、修改mysql 隔离等级

   查看 select @@tx_isolation; 

  编辑 mysql 的日志文件;transaction-isolation = READ_COMMITTED

  

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄