事务特点:ACID(原子性、一致性、隔离性、持久性)
日志系统:
- binlog(二进制日志:数据同步及恢复;server层)
- undolog(回滚日志;innodb)
- redolog(前滚日志;innodb)
- errorlog(错误日志)
- showlog(慢日志)
- relaylog(中继日志)
实现方式:
- 原子性:undolog( 利用undolog来实现)
- 隔离性:锁,mvcc
- 持久性:redolog
- 一致性:由其他3个决定
db更新执行流程(二阶段提交)
mvcc:多版本并发控制
并发情况:
- 读读:没问题,不需要并发控制
- 读写:数据安全问题,脏读、幻读、不可重复读
- 写写:数据安全问题,数据丢失
当前读:读取最新版本的数据(select … lock in share mode,select … for update,update,delete,insert)
快照读:历史版本数据(就是单纯的 SELECT 语句)
mvcc的3部操作
隐藏字段:
- DB_TRX_ID:创建这条记录的id或者最后修改这条数据事物的id(事务操作时,事务Id是递增的)
- DB_ROLL_PTR:回滚指针,指向上一条数据
- DB_ROW_ID:隐藏主键,如果没有显示主键的话,就会多一个隐藏主键
undolog:回滚日志(历史版本数据)
事务3更新,age=21
readview: 事务进行快照读的时候产生的读视图
- TRX_LIST:readview生成时刻当前系统活跃的事物id
- UP_LIMIT_ID:活跃列表中最小的事务id值
- LOW_LIMIT_ID:系统尚未分配的下一个事务id的值
可见性:根据可见性算法来判断是否可以读取到对应的数据
结论