上一篇 <<<MySQL的并发文件及事务隔离级别
下一篇 >>>MySQL常用命令汇总
MVCC(Multi-Version Concurrency Control)即多版本并发控制。就是同一份数据临时保留多版本的一种方式,进而实现并发控制
传统锁的方式保证实现多版本控制,需要通过锁的方式实现,效率非常低。
MVCC 使用了一种不同的手段, 无锁并发控制每个连接到数据库的读者,在某个瞬间看到的是数据库的一个快照,写操作造成的变化在写操作完成之前(或者数据库事务提交之前)对于其他的读者来说是不可见的。
Innodb中的隐藏列
列名 |
长度(字节) |
作用 |
DB_ROW_ID |
6 |
用于聚簇索引隐式产生的索引行(隐藏单调自增id) |
DB_TRX_ID |
6 |
插入或更新行的最后一个事务的事务标识符,每处理一个事务,值+1。(删除视为更新,将其标记为已删除) |
DB_ROLL_PTR |
7 |
指向当前记录项的rollback segment的undo log记录,找之前版本的数据就是通过这个指针 |
DELETE_BIT |
|
标识该记录是否被删除,这里的不是真正的删除数据,而是标志出来的删除。真正意义的删除是在commit的时候 |
各种语句的执行过程
1.insert
id |
name |
DB_TRX_ID |
DELETE_BIT |
1 |
test |
1 |
|
2.update
id |
name |
DB_TRX_ID |
DELETE_BIT |
1 |
test |
2 |
1 |
1 |
test2 |
2 |
|
3.delete
id |
name |
DB_TRX_ID |
DELETE_BIT |
1 |
test2 |
3 |
1 |
4.select
推荐阅读:
<<<MySQL发展历程与整体架构
<<<MySql连接空闲8小时自动断开的原因及连接池配置方法
<<<查询和更新sql语句执行原理
<<<MySQL存储引擎汇总
<<<InnoDB存储引擎的Buffer Pool 缓冲池底层结构
<<<Too many connections分析与processlist解读
<<<MySQL索引底层结构与实现原理
<<<MySql的表锁行锁及间隙锁
<<<MySQL的并发文件及事务隔离级别
<<<MySQL常用命令汇总