网站建设技术方案,wordpress添加支付教程,上海医院网站建设,支部网站建设《MySQL学习》 事务隔离
一.事务的概念
事务保证一组数据要么全部成功要么全部失败#xff0c;MySQL的事务基于引擎#xff08;如InnoDB#xff09;实现。
二.事务的隔离性与隔离级别
MySQL的标准隔离级别#xff1a;
读未提交 #xff1a; 一个事务还没提交时#…《MySQL学习》 事务隔离
一.事务的概念
事务保证一组数据要么全部成功要么全部失败MySQL的事务基于引擎如InnoDB实现。
二.事务的隔离性与隔离级别
MySQL的标准隔离级别
读未提交 一个事务还没提交时它做的变更就能被别的事务看到读已提交 一个事务提交之后它做的变更才会被其他事务看到。可重复读 一个事务执行过程中看到的数据总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下未提交变更对其他事务也是不可见的。串行化 是对于同一行记录“写”会加“写锁”“读”会加“读锁”。当出现读写锁冲突的时候后访问的事务必须等前一个事务执行完成才能继续执行
注意 MySQL 默认的隔离级别是可重复读而Oracle是读已提交
MySQL实现不同的隔离级别是基于MVCC在不同的时机快照读创建视图区别于MySQL 的 view 视图。 读未提交RU没有视图概念 在RC读已提交的隔离级别下会在每个语句执行前创建视图而不是事务开始时因此是可以读到事务提交前其他事务已经提交的数据 在RR可重复读的隔离级别下会在执行第一条select语句时创建视图直到事务提交因此只能读到事务开始前其他事务已经提交的数据当前事务前后读取到的数据都是一致的 串行化SC则是通过加锁
三.事务隔离的实现
在 MySQL 中实际上每条记录在更新的时候都会同时记录一条回滚操作。记录上的最新值通过回滚操作都可以得到前一个状态的值。 redo log 重做日志记录变更记录由 undo log 记录回滚日志
在查询这条记录的时候不同时刻启动的事务会有不同的 read-view。如图中看到的在视图 A、B、C 里面这一个记录的值分别是 1、2、4同一条记录在系统中可以存在多个版本就是数据库的多版本并发控制MVCC 回滚日志不会一直保留一个事务对应一个视图有的事务还对应undolog当对应undolog的事务之前的事务都提交了对应的视图也也跟随删除了则当前事务提交时视图删除undolog也将删除