mMySQL的事务隔离
隔离级别:
1,读未提交: 可以读取事务未提交的数据
2,读提交:只有事务提交了,才能读到
3,可重复度:开启事务读取数据的过程中,不受任何影响。每次读到的数据都是一样的。MVCC实现的
4,串行化。同时只能执行一个操作,只能读或者只能写。读,写都会加锁,下一个请求必须等待上一步操作完成。
MVCC ,多版本并行控制
InnoDB在每行记录后面保存两个隐藏的列来,分别保存了这个行的创建时间和行的删除时间。这里存储的并不是实际的时间值,而是系统版本号,当数据被修改时,版本号加1
在读取事务开始时,系统会给当前读事务一个版本号,事务会读取版本号<=当前版本号的数据
此时如果其他写事务修改了这条数据,那么这条数据的版本号就会加1,从而比当前读事务的版本号高,读事务自然而然的就读不到更新后的数据了
回滚日志:
保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读
回滚跟数据字典一起存放,回滚字段被清理时,文件大小不会改变
长事务:
1,长事务会导致保存很大的回滚日志,从而导致回滚段占用太多内存。只能重建数据库清理
2,长事务还会长时间占用锁资源。