1. 隔离级别
- read uncomitted 读未提交
- read comitted 读已提交
- repeatable read 可重复读
- serializable 串行化
查看隔离级别
show variables like 'transaction_isolation';
2. 事务隔离的实现
以可重复读为例
在 MySQL 中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。
假设一个值从 1 被按顺序改成了 2、3、4,在回滚日志里面就会有类似下面的记录。
3. MVCC的实现原理
当前读:
以下操作读取的是记录的最新版本,执行操作时会对记录进行加锁操作,避免其他并发事务修改当前的记录
select lock in share mode
select for update
update
insert
delete
快照读:
不加锁的select是快照读,即不加锁的非阻塞读
隐式字段:
DB_TRX_ID: 6byte,事务id
DB_ROLL_PTR: 7byte,回滚指针
DB_ROW_ID: 隐含的自增id,如果表没有主键,则会以该字段生成一个聚簇索引
delete_flag: 删除索引
undo日志:
- insert undolog: insert时产生,事务回滚时需要,事务提交时被立即丢弃
- update undolog: update或者delete时产生,事务回滚以及快照读时需要,当均不涉及改日志时,才会被purge线程统一清除
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。