当前位置:首页 > 数码 > MySQL的时光旅行者-解锁数据库的过去和未来-MVCC多版本控制机制 (mysql的默认使用的端口是?)

MySQL的时光旅行者-解锁数据库的过去和未来-MVCC多版本控制机制 (mysql的默认使用的端口是?)

admin5个月前 (05-03)数码21

1. MVCC多版本控制机制

MVCC机制通过以下两个机制实现: Read-View机制:为每个事务生成一个一致性视图(read-view),事务只能看到在这个视图中可见的数据。 Undo log版本链比对机制:记录数据的历史版本,供事务根据一致性视图规则推导出相应版本的数据。

1.1 Undo log版本链

事务在修改数据时,MySQL会保留修改前的数据undo回滚日志,并记录事务ID(trx_id)。这些undo log版本链串联起来形成数据历史版本记录。

1.2 Read-View机制

在可重复读和读提交隔离级别下,每个事务启动时都会生成一个read-view。read-view是一个包含所有活跃事务ID(已启动但未提交)的数组。read-view可用性规则如下: Row trx_id在数组中,表示不可见(尚未提交)。 Row trx_id不在数组中,表示可见(已提交)。

2. 案例

假设有数据表: ```sql CREATE TABLE example ( id INT PRIMARY KEY, i INT NOT NULL DEFAULT 0 ); ``` 并执行以下事务: ```sql BEGIN TRANSACTION; UPDATE example SET i = i + 1 WHERE id = 1; COMMIT; BEGIN TRANSACTION; UPDATE example SET i = i + 1 WHERE id = 1; COMMIT; BEGIN TRANSACTION; SELECT i FROM example WHERE id = 1; COMMIT; ``` 事务A的一致性视图:[11] 事务B的一致性视图:[11, 12] 事务C的一致性视图:[11, 12, 13] 根据以上信息,可以分析: 事务A查询i的值:事务A可以看到trx_id为11的最新版本数据,因此查询结果为10。 事务A更新i的值:事务A使用当前读,读取最新版本数据(i=12),然后执行更新操作,最终将i更新为14。

3. 一致性读与当前读

在可重复读隔离级别下,可以通过以下两种方式实现读取: 一致性读:通过回滚日志查找符合一致性视图规则的数据。 当前读:始终读取最新版本数据,不需要回滚。 事务中的更新语句总是以当前读的方式读取数据。

4. 总结

MVCC多版本控制机制通过read-view机制和undo log版本链比对机制,实现了事务并发下的数据一致性。它提供了可重复读和读提交两种隔离级别,满足不同的并发控制需求。

后端开发都需要那些技术?

后端开发,这个应该是需要很多的技术,这个应该也是需要你们一起去穿,母亲的这个应该是不可能是直接就能够出来的。

关于mySql 中乐观锁与读已提交(事务隔离级别)的搭配使用问题!!求大神带飞!

术式之后皆为逻辑,一切皆为需求和实现。希望此文能从需求、现状和解决方式的角度帮大家理解隔离级别。

隔离级别的产生

在串型执行的条件下,数据修改的顺序是固定的、可预期的结果,但是并发执行的情况下,数据的修改是不可预期的,也不固定,为了实现数据修改在并发执行的情况下得到一个固定、可预期的结果,由此产生了隔离级别。

所以隔离级别的作用是用来平衡数据库并发访问与数据一致性的方法。

事务的4种隔离级别

READ UNCOMMITTED未提交读,可以读取未提交的数据。READ COMMITTED 已提交读,对于锁定读(select with for update 或者 for share)、update 和 delete 语句,InnoDB 仅锁定索引记录,而不锁定它们之间的间隙,因此允许在锁定的记录旁边自由插入新记录。Gap locking 仅用于外键约束检查和重复键检查。REPEATABLE READ可重复读,事务中的一致性读取读取的是事务第一次读取所建立的快照。SERIALIZABLE序列化

在了解了 4 种隔离级别的需求后,在采用锁控制隔离级别的基础上,我们需要了解加锁的对象(数据本身&间隙),以及了解整个数据范围的全集组成。

解锁数据库的过去和未来

数据范围全集组成

SQL 语句根据条件判断不需要扫描的数据范围(不加锁);

SQL 语句根据条件扫描到的可能需要加锁的数据范围;

以单个数据范围为例,数据范围全集包含:(数据范围不一定是连续的值,也可能是间隔的值组成)

1. 数据已经填充了整个数据范围:(被完全填充的数据范围,不存在数据间隙)

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: MVCC