mysql-事务隔离 为什么你改了我还看不见

mMySQL的事务隔离

隔离级别:

1,读未提交: 可以读取事务未提交的数据

2,读提交:只有事务提交了,才能读到

3,可重复度:开启事务读取数据的过程中,不受任何影响。每次读到的数据都是一样的。MVCC实现的

4,串行化。同时只能执行一个操作,只能读或者只能写。读,写都会加锁,下一个请求必须等待上一步操作完成。

MVCC ,多版本并行控制

InnoDB在每行记录后面保存两个隐藏的列来,分别保存了这个行的创建时间和行的删除时间。这里存储的并不是实际的时间值,而是系统版本号,当数据被修改时,版本号加1
在读取事务开始时,系统会给当前读事务一个版本号,事务会读取版本号<=当前版本号的数据
此时如果其他写事务修改了这条数据,那么这条数据的版本号就会加1,从而比当前读事务的版本号高,读事务自然而然的就读不到更新后的数据了

回滚日志:

保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读

回滚跟数据字典一起存放,回滚字段被清理时,文件大小不会改变

长事务:

1,长事务会导致保存很大的回滚日志,从而导致回滚段占用太多内存。只能重建数据库清理

2,长事务还会长时间占用锁资源。

 

posted @ 2019-12-23 20:35  影落  阅读(251)  评论(0编辑  收藏  举报