mysql隔离机制可重复读

隔离机制底层用多版本控制机制实现的。innodb mvcc

mvcc是乐观锁一种应用  就是假设是不会并发的,但是在提交的时候进行确认,正确就提交

数据每行的末尾会存在三列 一行的id(如果无主键,这列做喂主键。形成聚集索引。)事物id  undo log 

每次增删改都会启用事物,然后id会自增。 Undolog  修改前的数据存储于undolog。(这里相当于快照。修改前的快照)delete删除位置

事物会根据版本号建立行快照。 tr1 tr2

可重复读 就是基于此实现的,当事物1中a读是1,快照的事物版本号为tr,然后并发事物2修改了a是2,而且已经提交,原始数据的事物版本号变为tr+1 a又读 由于他读的事物版本号的快照是小于=tr的 , 所以还是读的是1

修改的时候,读取的初始值,读取事物id,修改(生成一个快照,事物id+1,) 然后提交的时候再去读事物id,看事物Id是否只+1。

提交的时候基于行锁

 

posted @ 2019-01-04 14:30  saveworld_niub  阅读(386)  评论(2编辑  收藏  举报