极客mysql笔记(3)

简介: 事务隔离知多少
内容
  一 基础知识
  1 事务特性 ACID
  A 原子性 C 一致性 I 隔离性 D 持久性
  2 并行事务出现的问题
    1 脏读 读取了其他事务未提交的数据
     2 不可重复性读 1 事务内多次查询的结果不一致 2 可以通过for update or RR模式的MVCC避免这种现象 3 针对的是update/delete操作
     3 幻读 1 事务内进行了条件数据修改,二次查看时,发现还有未修改行 2 可以通过gap lock模式避免这种现象 3 针对的是insert操作
  3 mysql隔离级别
   RU 读未提交 -> 其他事务可以读取未提交的事务
   RC 读已提交 -> 其他事务只能读取已提交的事务 可以避免(脏读) 不可避免(不可重复性读和幻读) 锁(record lock)
   RR 可重复性读-> 本事务在事务内多次读取的事务是一致的,不会产生变化,直到本事务提交 可以避免(脏读,不可复重复性读和幻读) 锁(record lock+gap lock)
   SE 串行化->事务之前是串行化执行的,包括select
 4 默认隔离级别
  mysql rr级别 oracle rc级别
  oracle应用迁移到mysql的时候要注意
  金融级别的建议使用RR
5 多版本事务控制(MVCC)与undo
  1 利用undo实现,事务在每一次修改数据时,会把修改的数据存入undo表空间里,同一条记录在系统中可以存在多个版本,称为多版本事务控制.undo清理会在事务不在需要的时候清理掉这些原始数据,这样就实现了可重复性读
  2 大事务如果不提交释放,会长期占据undo空间,由于undo存储在ibdata里,会无限导致ibdata增大
  3 mysql5.7会进行undo表空间的独立,避免ibdata的增大情况

猜你喜欢

转载自www.cnblogs.com/danhuangpai/p/9988998.html
今日推荐