mysql事务隔离级别与spring事务隔离级别的区别

mysql事务隔离级别与spring事务隔离级别的区别:

  脏读:为什么会出现脏读,因为你对数据库的任何修改都会是立即生效的,至于别人能不能看到主要取决与你 是否加锁了,数据库的执行与事务没有关系,事务只是保证对数据库所做的操作会不会撤销而已,mysql默认是行级锁,修改时只会对修改的那几行加锁,加锁期间其他用户线程是看不到修改结果的,所以会导致不可重复读和幻读的问题;

mysql的事务隔离是通过行级锁实现的;

oracle的行级锁只有排他锁没有共享锁,默认不是使用锁机制来实现隔离的,而是通过版本控制,不会脏读但是会出现重复读问题,因为a线程在修改期间没有加锁,b线程仍然可以读取到

幻读的原因:

  幻读的解释:幻读是因为a线程在一定范围内对一批数据进行修改,b线程新增了一条数据,导致用户以为自己没有全量修改;

  幻读的原因:因为mysql默认是通过行级锁来实现的,而不是表级锁,那么在修改期间其他线程当然可以新插入数据了;如果使用了mysql表级锁的引擎如:MyIsAM,幻读就不可能出现;

spring的隔离级别:

      spring的隔离级别一定是数据库锁机制支持的;如果数据库没有行级锁机制,也没有版本控制那么spring也没办法;

      脏读和不可重复读的区别在于读的时候是否加了读共享锁,不可重复读加了读共享锁;脏读是写的时候加了排他锁

      spring和数据库(mysql)隔离级别的比较:

        spring管理的事务是逻辑事务,而物理事务和逻辑事务的区别在于 事务的传播行为,spring隔离级别和数据库是对应的,在做dml时,数据在数据库中其实已经修改了,只是没有生效而且由于多线程锁的关系,其他的线程过来是看不到该dml操作的结果的。

你可能感兴趣的:(mysql事务隔离级别与spring事务隔离级别的区别)