innodb mvcc,事务隔离级别,读写锁

mvcc其实和copyonwritelist的思路差不多:读不加锁,写加锁,事务提交之后释放锁,并且延伸的是,在UNdolog里面保存了几个版本,实现不同的隔离级别。如果读数据页里面最新的数据,那么就是读未提交。如果按照版本号,去undolog里读取已经提交过的快照版本,就是读已提交。如果在事务开始之后的其他事务提交的快照版本都不读取,就可以实现可重复读。至于解决幻读,那要在读的时候,加范围的写锁(gaplock),repeatableRead的隔离级别能做到?还是最高的串行化能做到?

有一种对幻读的解释是:两次读,第二次读的数据和第一次的数目不同。其实在mvcc的机制下,是不会出现这种情况的

有一种情况,是幻读的场景:在一个唯一索引的地方,比如phone,用一个手机号去数据库查,是没有的,但是插入之前,有别的事务插入了,因为读的时候不加锁,所以是阻止不了别的事务插入的,那么自己插入的时候会报错,这种现象就像产生了幻象一样。

上一篇:NOIP2015提高组Day1 Message


下一篇:linux - 目录、文件默认属性: umask使用