MySQL高级之锁模块与事务并发访问产生的问题以及事务隔离机制
事务并发引起的问题与避免
1、更新丢失——mysql所有事务隔离级别在数据库层面上均可避免
取款事务失败,将记录回滚至100,存款事务更新丢失!
2、脏读———READ-COMMITTED事务隔离级别以上可避免 <===> RC隔离级别以上
READ_UNCOMMIT:并发时,A事务读到了B事务未提交的数据,B回滚,A读到的数据无效!
若A对数据进行update操作,这时候的数据是多么的浮夸...
A 1000-100===>900 B读到A尚未提交事务的数据900,A回滚,B在900的基础上操作,比如+200,更新为1100!
3、不可重复读
不可重复读———REPEATABLE-READ事务隔离级别以上可避免 <===> RR隔离级别以上解决
A事务在当前事务中多次读取数据,数据不一致!恰好其他事务改动A读的纪录,A因为总是读已经提交的数据,会读到不同的数据。
4、幻读
幻读———SERIALIZABLE事务隔离级别可避免 <===> Serilizable隔离级别以上解决
事务A读到事务的新增或者删除的数据!
innodb采取了巧妙的方式避免了幻读!行锁加上间隙锁方案
innodb避免了幻读的原理https://blog.csdn.net/Be_insighted/article/details/120875537?spm=1001.2014.3001.5502