Mysql-事务隔离
1. 隔离性和隔离级别
1. 事务特性
- 原子性
- 持久性
- 隔离性
- 一致性
2. 事务隔离级别
- 读已提交(事务未提交时,变更能被其它事务看到)
- 读未提交(事务提交后,其它事务才能看到变更)
- 可重复读(一个事务执行过程中,总是跟启动时看到的数据是一致的。未提交的变更对其它事务不可见)
- 串行化(同一行记录写会加写锁,读会读锁。当出现读写锁冲突时,后访问的事务,必须等前一个事务完成,才能执行)

v1=v2=1,v3=2
四种事务得到的结果
- 读未提交: v1、v2、v3=2
- 读已提交: v1=1 ,v2、v3=2
- 可重复读:v1=v2=1,v3=2
- 可串行化 : v1=v2=1,v3=2
2. 事务隔离的实现
当一个值从 1 按顺序变成 2,3,3 那么他的日志里面就会有类似的回滚段记录

如图事务 A、B、C 修改记录导致一个字段对应多个值。
通过 MVCC 来实现一个数据的多个版本,通过 undo log 实现数据版本的回滚
通过 MVCC 和 undo log 来实现事务的隔离
具体可以参考
当回滚段日志过长时,系统会自动清除。
3. 事务的启动方式
- set autocommit=0 关闭自动提交,只要执行 select 语句自动开启事务
- begin 或是 start transaction
4. 小结
- 四大特性和隔离级别
- 事务隔离的实现(通过 MVCC 和 undo log)
- 事务的启动方式
- 自动启动 select 语句执行时自动启动
- 手动启动 begin、 start transaction
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 无♥部落阁!
评论





