Mysql

79 阅读1分钟

事务

定义

image.png

事务特性

image.png

事务隔离性

image.png

  • mysql默认可重复读;
  • oracle默认读已提交;
  • mysql的读已提交和可重复读就是用MVCC实现;

读未提交

image.png

读已提交

image.png

可重复读

image.png

串行化

image.png

  • 读和写,写和读之间全部串行,效率低;
  • 实现原理:读加读锁,写加写锁;
  • 查询: select * from xx lock in share mode;(查询加读锁,如果不提交,其他的读写操作全部阻塞)

MVCC 多版本并发控制机制

写时复制 copy on write

image.png

  • 如果不进行处理,并发情况会有脏读问题
  • 解决并发问题:
    • 1)加锁,但是性能会很低;读写互斥了;
    • 2)copy on write
  • 为了支持高并发,可以用copy on write;
    • 替换之前,读的仍然是老的版本,但是不会读到脏数据

MVCC

image.png

image.png

  • 每个操作会有对应的undo日志
  • 每次操作会有个回滚指针指向上次的版本,整个形成一个版本链
  • 写的时候copy on write 生成新的数据版本,指向上一次
  • 读的时候仍然是读的老的版本(一套可见性算法)

锁机制

image.png

乐观锁

update amount = 500 where id=1 and version=2

面试题

查询场景需要事务吗?

参考视频