为什么RC级别不会出现间隙锁, RC级别下行锁也不会升级表锁?

RC级别: 即读取已提交, 数据库的四个事务隔离级别之一

串行化(S): 一个事务一个事务的执行

可重复读(RR): 无论其他事务是否修改并提交了数据, 在这个事务中看到的数据始终不受影响

读取已提交(RC):其他事务提交了对数据的修改后, 本事务就能读取到修改后的数据的值

读取未提交(RU): 其他事务只要修改了数据, 即使未提交, 本事务也能看到修改后的数据的值

 

确切的说, MySQL为了保证在RR级别下, 多次读取的数据始终保持不变, 在InnoDB的引擎下就会触发行锁,以及间隙锁,来确保数据在查询期间不会被其他事务进行修改,保证数据的可重复读, 所以在RR级别下,如果没有击中索引,就不能确保锁具体哪行的数据,所以直接升级为表锁,而在RC和RU级别下不用去确保多次读取数据的一致性, 就不会有间隙锁(防止出现幻读),以及行锁升级表锁, 实际开发中用的比较多的还是RC和RR, RU会出现脏读的情况,一般不会用

你可能感兴趣的:(python学习)