MySQL技术内幕-InnoDB存储引擎读书笔记(mysql存储引擎概述)
来源:互联网 发布:天谕业刹捏脸数据下载 编辑:程序博客网 时间:2024/06/04 18:02
1、Mysql 存储引擎概述
Mysql表存储引擎众多,我们重点了解一下MyISAM与InnoDB
MyISAM存储引擎不支持事务,仅支持表级锁,支持全文索引,适合读多写很少的应用场景,在实际开发中很少使用。
InnoDB存储引擎支持事务,支持行锁,支持SQL4种隔离级别(读未提交、读已提交、可重读、串行化),支持多版本并发控制(MVCC)实现无锁的并发读。
事务的隔离级别针对的是读操作。
MVCC多版本并发控制,主要是InnoDB为支持无锁的并发控制,实现读已提交、可重读隔离级别,所谓的可重复读就是在一个事务中读取同一条记录,返回的数据一致。举例如下:
A 事务 B事务
start transalation start transalation
select a.id,a.name from A a where a.id=1
返回( 1,dingw) update A set a.name='dingw2' where a.id=1
commit
select a.id,a.name from A a where a.id=1
返回(1,dingw),此结结果不受事务B的影响,尽管B事务已经提交。
如何实现上述需求呢?如果通过锁是可以实现的,如果A事务对A表进行查询操作,使得B事务的更新无法执行,这样在A事务结束后B事务才能执行,能实现可重读隔离级别,但并发读明显不理想,有没有一种无锁设计来实现可重复读隔离级别呢?InnoDB使用MVCC(多版本并发控制协议来实现可重复读隔离级别)
MVCC 为每行数据增加二列(更新版本号,删除版本号)[版本号存储的其实就是事务ID]【可重读隔离级别】
select 操作:
Mysql只返回满足如下条件的行数据:
1)更新版本号小于或等于当前事务ID(小于表示是事务开始之前的数据,等于表示当前事务对数据进行过修改。)
2)删除版本号要么为空,要么大于当前事务ID,(如果为空,表示未删除,如果大于事务ID,表示是以后修改的)
insert 操作
1)更新版本号设置为当前事务ID,删除版本号为空
update 操作
update操作为分差为两条语句,先复制一份数据,将删除版本号设置为当前事务ID(这样保证select时不会查出该数据),然后插入一条新纪录(insert),其更新版本号为当前事务ID,删除版本号为空
delete 操作
将删除版本号设置为当前事务ID
mysql会定时清理这些多余数据。
InnoDB存储引擎的MVCC版本基于Undo日志,详情请关注后续文章。
阅读全文
1 0
- MySQL技术内幕InnoDB存储引擎 读书笔记
- 《MySQL技术内幕--InnoDB存储引擎》读书笔记
- MySQL技术内幕-InnoDB存储引擎读书笔记(mysql存储引擎概述)
- MySQL技术内幕-InnoDB存储引擎读书笔记(MySQL日志文件)
- MySQL技术内幕-InnoDB存储引擎读写笔记(索引概述)
- mysql技术内幕-innodb存储引擎读书笔记(下)
- mysql技术内幕-innodb存储引擎读书笔记(中)
- mysql技术内幕-innodb存储引擎读书笔记(上)
- MySQL技术内幕:InnoDB存储引擎读书笔记(中)
- MySQL技术内幕:InnoDB存储引擎读书笔记(上)
- MySQL技术内幕:InnoDB存储引擎读书笔记(下)
- MySQL技术内幕:InnoDB存储引擎读书笔记(上)
- MySQL技术内幕:InnoDB存储引擎读书笔记(中)
- MySQL技术内幕:InnoDB存储引擎读书笔记(下)
- [DB] MySQL技术内幕:InnoDB存储引擎读书笔记(上)
- [DB] MySQL技术内幕:InnoDB存储引擎读书笔记(中)
- [DB] MySQL技术内幕:InnoDB存储引擎读书笔记(下)
- 读书笔记 —— 《MySQL技术内幕 InnoDB存储引擎》
- 28_JSP标准标签库(JSTL)
- 二叉树的下一个结点
- equals和==的区别
- Butterknife的使用
- surf算法原理
- MySQL技术内幕-InnoDB存储引擎读书笔记(mysql存储引擎概述)
- 正则表达式拆分字符串
- 29_Filter_过滤器入门
- 7. Android
- 根据经纬度跳转三方app地图导航
- 到哪里去找关于NLP方面的论文
- Spring Boot框架
- 30_Filter_登录过滤器的实现
- 欢迎使用CSDN-markdown编辑器