事务
定义
事务特性
事务隔离性
- mysql默认可重复读;
- oracle默认读已提交;
- mysql的读已提交和可重复读就是用MVCC实现;
读未提交
读已提交
可重复读
串行化
- 读和写,写和读之间全部串行,效率低;
- 实现原理:读加读锁,写加写锁;
- 查询: select * from xx lock in share mode;(查询加读锁,如果不提交,其他的读写操作全部阻塞)
MVCC 多版本并发控制机制
写时复制 copy on write
- 如果不进行处理,并发情况会有脏读问题
- 解决并发问题:
- 1)加锁,但是性能会很低;读写互斥了;
- 2)copy on write
- 为了支持高并发,可以用copy on write;
- 替换之前,读的仍然是老的版本,但是不会读到脏数据
MVCC
- 每个操作会有对应的undo日志
- 每次操作会有个回滚指针指向上次的版本,整个形成一个版本链
- 写的时候copy on write 生成新的数据版本,指向上一次
- 读的时候仍然是读的老的版本(一套可见性算法)
锁机制
乐观锁
update amount = 500 where id=1 and version=2
面试题
查询场景需要事务吗?