MySQL 事务隔离级别实现原理
InnoDB 有两种读取数据的方式
- 快照读/一致性读,MVCC
- 当前读,获取读写锁后读取行的最新数据
InnoDB 用一致性读视图实现了 MVCC,用于支持读已提交和可重复读隔离级别的实现。
启动事务时立即创建视图
start transaction with consistent snapshot
快照读
快照读/MVCC
InnoDB 每个事务都有一个唯一的事务id,transaction id。
它是在事务开始的时候向 InnoDB 事务系统申请的,按申请顺序严格递增。
每次更新数据行时,InnoDB 会生成一个新的数据版本(undo log)并把 transaction id 赋值给这个数据版本的 row trx_id。
当前读
如果应用逻辑是查询后更新数据,应该使用当前读,否则快照读可能读到旧数据,造成客户端丢失更新。
更新语句和加锁的查询语句会使用当前读。
加读锁
select ... lock in share mode
加写锁
select ... for update
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2022-10-15 Elasticsearch 和 Kibana 安装