[MySQL] MVCC 多版本并发控制实现的事务
2023-02-18 15:46:56 时间
1.没有一个统一的实现标准,实现了非阻塞的读操作,写操作也只锁定必要的行
2.通过保存数据在某个时间点的快照实现的
3.典型的有乐观并发控制和悲观并发控制
4.innodb的mvcc是每次事务都有递增的版本号,通过在每行记录的后面添加两列隐藏字段,两列分别是是创建版本号和删除版本号,存储操作它事务的版本号
5.在事务中增删改查就是对两列版本号字段进行操作
insert 为新插入的每一行保存当前事务版本号到 行创建版本号字段
update 插入一行新的保存当前事务创建版本号,修改原行数据的删除版本号为本次事务的版本号
delete 修改行的删除版本号字段为本次事务的版本号
select 查询 创建版本号字段 小于等于当前事务版本的数据 确保该记录是本次之前就存在的或本次事务新插的
查询 删除版本号字段 不存在或者大于当前版本的数据 确保该记录在本次事务之前没删除
6.这样的设计就不需要加锁了,读和操作性能好,但是需要额外的存储空间
7.mvcc只在REPEATABLE READ和READ COMMITED两个隔离下工作;READ UNCOMMITED总是读取最新数据;SERIALIZABLE对读取的行都加锁
相关文章
- Kubernetes微服务常见概念及应用
- REDIS 一个全栈DBA 不可缺的闭环, why not chose redis as primary database
- Redis高可用全景一览
- netty在真实项目里的应用
- Nginx系列(11)- web服务、代理,应用层负载均衡、应用层安全防护、 Nginx+Lua、动静分离
- Nginx系列(10)- Nginx配置文件详解
- Nginx系列(9)- Nginx常用命令
- Nginx系列(8)- Nginx安装 | Docker环境下部署
- Nginx系列(6)- nginx: [error] CreateFile() "D:\nginx-1.20.1/logs/nginx.pid" failed (2: The system cannot find the file specified)
- Nginx系列(5)- nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
- Nginx系列(4)- Nginx安装 | Windows
- Nginx系列(3)- 负载均衡
- Nginx系列(2)- 正向代理和反向代理
- Nginx系列(1)- Nginx简介
- Dockers(29)- 网络连通
- Docker系列(28)- 自定义网络
- Docker系列(27)- 容器互联--link
- Docker系列(26)- 发布镜像到阿里云容器服务
- Docker系类(25)- 发布镜像到DockerHub
- Docker系列(24)- 实战:DockerFile制作tomcat镜像