mysql多版本控制之MVCC

1.MVCC(Multiversion concurrency control) :多版本并发控制,当我们并发访问数据库(读或写)时,对事物内正在处理的数据做多版本控制,用以防止写操作的阻塞影响读操作的并发性能。

2.下面我们具体分析下在mysql中是如何对事物内处理的数据做多版本控制的。

上图表示数据库中的一张teacher表,表中我们定义了id,name,age三个字段。而后面多出来的两个字段DB_TRX_ID(数据行的版本号)和DB_ROLL_PT(删除版本号),就是数据库做多本版控制引入的两个字段。下面我们分析下数据库在对表中的数据进行操作时,这两个字段是如何变化的。

在mysql中有一个全局事物id的概念,可以理解为每开启一个事物,数据库都会给这个事物一个事物id,而且这个事物id是递增的。假设现在数据库的全局事物id为1,我们使用一个事物在teacher表中insert两条语句,即执行下面的语句,执行完成之后,插入的两条数据的数据行版本号为1,删除版本号为NULL。

begin;//开启一个事物

insert into teacher(name, age) value('seven',18);

insert into teacher(name, age) value('qingshan', 19);

commit;//提交事物

执行完上面的这个事物之后,数据库teacher表的状态变成了如下图。

猜你喜欢

转载自www.cnblogs.com/code-star/p/10692031.html