1. 隔离级别

  • read uncomitted 读未提交
  • read comitted 读已提交
  • repeatable read 可重复读
  • serializable 串行化

查看隔离级别

show variables like 'transaction_isolation';

2. 事务隔离的实现

以可重复读为例
在 MySQL 中,实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值,通过回滚操作,都可以得到前一个状态的值。
假设一个值从 1 被按顺序改成了 2、3、4,在回滚日志里面就会有类似下面的记录。
image.png

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线程统一清除

a8f808239aea6008c9e90a54e4d4616.jpg
26b3226461bab4d9d495931a17a61e3.jpg


AshShawn
6 声望2 粉丝

下一篇 »
mysql--索引