snapshot vs RR
RR隔离级别属于正式规定的四种隔离级别中的一种,SS属于一种衍生的隔离级别。
两者均通过MVCC实现快照读,读不上锁,写上锁。
两者的区别是在出现冲突写的情况时:
- RR只会阻塞冲突写,待一方事务结束(commit或rollback),等待的事务继续执行。
 - SS会阻塞冲突写,持有锁的事务COMMIT提交后,等待的事务必须回滚。
 
SS隔离级别更高。
准备数据
  | 
  | 
针对mysql、pg、cockroachdb进行行为测试。
测试用例
| step | trx1 | trx2 | 
|---|---|---|
| 1 | begin; | begin; | 
| 2 | update t1 set c1=100 where c1 =1 | |
| 3 | update t1 set c1=200 where c1 =1 | |
| 4 | commit; | |
| 5 | commit; | |
| 6 | select * from t1 | 
测试结果
所有的trx2:step3都会被阻塞。
mysql和pg行为一致,最后c1的值为200.
cockroachdb会回滚trx2,最后为100
  | 
  | 
测试脚本
cockroachdb
  | 
  | 
mysql
  | 
  | 
pg
  | 
  |