mysql事务、MVCC

59 阅读1分钟

一、事务是什么?有哪几大特性?

  1. 事务保证一组操作的一致性,要么全部成功要么全部失败
  2. 原子性:一组操作要么全部成功要么全部失败,使用undo log日志记录每一步的反向操作,要是中间出现异常就利用undo log回滚到最开始
  3. 隔离性:并发情况下事务之间互不干扰,读未提交、读已提交、可重复读、串行
  4. 持久性:多个事务完成后,mysql挂掉会丢失数据,采用redo log记录提交了的事务的操作,进行数据恢复
  5. 一致性:使用事务的目的,使最后数据一致

二、四种隔离级别产生的危害?

  1. 读未提交:会产生脏读,例如A读取B还没提交的事务,然后B进行回滚,A读取的数据就是没用的
  2. 读已提交:解决了脏读问题,但是会出现不可重复读问题,例如A读取了B的事务,但B对事务进行修改,A就需要再读B,否则不一致,可能一直保持这样的不一致
  3. 可重复读:做事务级别的快照,只会读取当前事务的版本,不被修改影响,会产生幻读(在一个事务内读取到了别的事务插入的数据,导致前后不一致),通过MVCC解决

三、MVCC知道吗?

  1. read view:用来管理版本信息
字段作用
trx_ids尚未提交的事务版本号集合
up_limit_id下一次要生成的事务ID值
low_limit_id尚未提交版本号的事务ID最小值
creator_trx_id当前的事务版本号
  1. undo log:用来找到版本的数据