0%
事务隔离级别
问题
隔离级别
- 读未提交
- 一个事务还没提交的时候,其所作的变更可以被其他事务看到。
- 读提交
- 一个事务提交后,他做的变更才会被其他事务看到。
- 可重复读
- 一个事务执行的过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。
- 串行化
- 对于同一行记录,写会加写锁,读会加读锁,一旦出现读写锁冲突的时候,后访问的事务必须等前一个事务完成才能继续执行。
隔离级别实现
- 数据库里面会创建一个视图,访问的时候以这个视图的逻辑结果为准。
- 可重复读,视图在事务启动时创建,这个事务存在期间都在用这个视图。
- 读提交,视图实在每个sql语句开始执行的时候创建
- 读未提交,直接返回记录最新值,没有视图概念
- 串行化,直接用加锁的方式避免并行访问
- 隔离的实现
- 每条记录在更新的时候都会同事记录一条回滚操作。记录上的最新值,通过回滚操作都可以得到前一个状态的值。
- 系统会在没有实物需要使用到这些回滚日志的时候,删除回滚日志。
- 不要使用长事务
- 长事务意味着系统里面会存在很老的事务视图。由于这些事务随时可能访问数据库里面的任何数据,所以这个事务提交之前,数据库里面会存储他可能用到的所有回滚记录,导致占用大量的存储空