read view初探

 

 

 

 

 

 

 

session A session B
start transaction;  
  start transaction;

select * from tab1;
Empty set

 
  insert into tab1 values (1,"1");

select * from tab1;
Empty set

 
  commit;

select * from tab1;
Empty set

 

commit;

 

select * from tab1;
+——+——+
| col1 | col2 |
+——+——+
| 1 | 1 |
+——+——+

 

 

 

 

 

 

 

 

ca88官网, 

 

 

3.

 

session A session B
truncate table tab1;  

start transaction;

 
  start transaction;
  insert into tab1 values (1,"1");
  commit;

select * from tab1;
+——+——+
| col1 | col2 |
+——+——+
| 1 | 1 |
+——+——+

 

 

 

 

 

 

 

 

 

 

 

 

innodb为贯彻MVCC所使用的中间快速照相,福睿斯奥迪Q5(REPEATABLE
READ)隔开分离级别下在率先次询问时创建read view,福特ExplorerC(READ
COMMITTED)隔绝级别下会在每回查询时创建read view
以下测试在Koleos福睿斯隔开分离级别下,数据库版本为5.7.20
1.

  1. https://dev.mysql.com/doc/refman/5.6/en/innodb-consistent-read.html

 

 

2. http://kabike.iteye.com/blog/1820553

敲定:在早就查询后,其余工作做的改动,在本事务不可知

 

 

 

 

 

 

 

 

 

 

 

 

1.select … for update和select … lock in share mode(8.0是select …
for share)会再度生成read view

另外:

结论:就算事务A比事务B先起先,不过首先次询问在B事务提交后,所以能够查询到结果

 

敲定:尽管事务A看不到事务B做的改动,可是修改也会影响事务B已经交付的数目,且修改发生后,被涂改的记录(就算是其余事情提交的),也会成为对该工作可知

 

2.select … with consistent
snapshot不会读到在本事务起首后提交的数目,即便第三遍select是在别的业务提交后

session A session B
truncate table tab1;  

start transaction;

 
  start transaction;

select * from tab1;
Empty set

 
  insert into tab1 values (1,"1");
  insert into tab1 values (2,"2");
  insert into tab1 values (3,"3");
  commit;

select * from tab1;
Empty set

 

update tab1 set col2 ="22" where col1>=2;

2 rows affected

 

select * from tab1;
+——+——+
| col1 | col2 |
+——+——+
| 2 | 22 |
| 3 | 22 |
+——+——+

 

 

 

 

 

 

 

2.

参照网址:

 

 

相关文章