共计 490 个字符,预计需要花费 2 分钟才能阅读完成。
事务
下图依照工夫执行两个事务
create table T(c int) engine=InnoDB;
insert into T(c) values(1);
隔离级别
- 读未提交:V1=2,V2=2,V3=2
- 读提交:V1=1,V2=2,V3=2
- 可反复读:V1=1,V2=1,V3=2
- 串行化: V1=1,V2=1,V3=2
串行化则在事务 B 执行“将 1 改成 2”的时候,会被锁住。直到事 务 A 提交后,事务 B 才能够继续执行
在实现上,数据库外面会创立一个视图,拜访的时候以视图的逻辑后果为准。
在“可反复 读”隔离级别下,这个视图是在事务启动时创立的,整个事务存在期间都用这个视图。
在“读提交”隔离级别下,这个视图是在每个 SQL 语句开始执行的时候创立的。
在“读未提交”隔离级别下间接返回记录上的最新值,没有视图概念;
而“串行 化”隔离级别下间接用加锁的形式来防止并行拜访。
MVCC
- 暗藏字段:
DB_TRX_ID 创立这条记录的事务 id 或者最初一次批改的事务 id
DB_ROLL_PTR 回滚指针,指向这条记录的上一个版本
DB_ROW_ID 暗藏主键,如果没有主键,会生成一个 6 字节的 row_id - undo log
快照读 读历史 - reaview
正文完