数据库事务隔离级别

痞子三分冷 提交于 2019-12-05 16:47:10

1.事务特性ACID

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性(Durability)

2.事务隔离级别

读未提交(Read Uncommited)、读已提交(Read Committed)、可重复读(Repeatable Read)、序列化(Serializable)

3.可能出现问题表格

-------------------------

        脏读     不可重复读    幻读

RU    true         true          true

RC    false        true          true

RR    false        false         true

S      false        false         false

-------------------------

4.RU和S在实际应用中基本不用,RU会导致脏读,数据不可置信。S锁级别太高,性能差

5.Mysql默认隔离级别为RR,Oracle等其他默认级别为RC,Mysql推荐binlog格式为row

6.Mysql默认级别为RR的原因是,在Mysql早期,binlog只有statement格式,对于master/slave主从复制可能出现顺序错误的bug

后期Mysql推出了row级别日志解决了此问题,所以所有业务型数据库推荐隔离级别为RC

7.推荐隔离级别为RC的原因(RC优于RR的原因)

-RC比RR更不容易出现死锁

-在索引未达成的情况下,RR锁全表,RC锁行,RC效率更高

-update时,RC可以使用半一致性读增加效率,RR只能等待

-RC对比RR劣势在于不可重复读问题,而此问题在业务上完全可以接受,因为commited就已经是新数据了,可以被读取出来展示

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!