0%

MySQL学习总结(2)

事务隔离级别

问题

  • 脏读
  • 可重复读
  • 幻读

隔离级别

  • 读未提交
  • 一个事务还没提交的时候,其所作的变更可以被其他事务看到。
  • 读提交
  • 一个事务提交后,他做的变更才会被其他事务看到。
  • 可重复读
  • 一个事务执行的过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。
  • 串行化
  • 对于同一行记录,写会加写锁,读会加读锁,一旦出现读写锁冲突的时候,后访问的事务必须等前一个事务完成才能继续执行。

隔离级别实现

  • 数据库里面会创建一个视图,访问的时候以这个视图的逻辑结果为准。
  • 可重复读,视图在事务启动时创建,这个事务存在期间都在用这个视图。
  • 读提交,视图实在每个sql语句开始执行的时候创建
  • 读未提交,直接返回记录最新值,没有视图概念
  • 串行化,直接用加锁的方式避免并行访问
  • 隔离的实现
  • 每条记录在更新的时候都会同事记录一条回滚操作。记录上的最新值,通过回滚操作都可以得到前一个状态的值。
  • 系统会在没有实物需要使用到这些回滚日志的时候,删除回滚日志。
  • 不要使用长事务
  • 长事务意味着系统里面会存在很老的事务视图。由于这些事务随时可能访问数据库里面的任何数据,所以这个事务提交之前,数据库里面会存储他可能用到的所有回滚记录,导致占用大量的存储空

  • 源:<极客时间> MySQL实战45讲教程