Solo  当前访客:1 开始使用

MySQL在可重复度的隔离级别下的并发问题

https://www.51cto.com/article/719614.html


可重复读:在该事务级别中,多次进行同一sql的读取,数据是会保持一致,尽管两次读取之间已经有数据进行提交


mvcc(muiltversion concurrency control 多版本并发控制)机制是可重复读隔离级别下能够实现 可重复读的核心,为了解决在读写高并发情况下

对数据的操作主要有2中,分别是读和写,而在并发场景下,就可能出现以下三种情况:

  • 读-读并发 (无影响)
  • 读-写并发(mvcc)
  • 写-写并发(加锁)

快照读:普通的 select * from t_table_name

当前读: (读取当前的数据)加锁的。select * from t_table_name for update (for share, 或者是 insert update delete 等操作)

Undo Log:是Mysql中比较重要的事务日志之一,用于回退的日志,在事务没提交之前,MySQL会先记录更新前的数据(快照数据)到 undo log日志文件里面,当事务回滚时或者数据库崩溃时,可以利用 undo log来进行回退。

一条记录在同一时刻可能有多个事务在执行,那么,undo log会有一条记录的多个快照

数据库中的每行记录的隐式字段:

db_row_id:隐藏主键,如果我们没有给这个表创建主键,那么会以这个字段来创建聚簇索引。

db_trx_id:对这条记录做了最新一次修改的事务的ID

db_roll_ptr:回滚指针,指向这条记录的上一个版本,其实他指向的就是Undo Log中的上一个版本的快照的地址。

Read View 主要来帮我们解决可见性的问题的, 即他会来告诉我们本次事务应该看到哪个快照,不应该看到哪个快照。

在 Read View 中有几个重要的属性:

  • trx_ids,系统当前未提交的事务 ID 的列表。
  • low_limit_id,未提交的事务中最大的事务 ID。
  • up_limit_id,未提交的事务中最小的事务 ID。
  • creator_trx_id,创建这个 Read View 的事务 ID。

标题:MySQL在可重复度的隔离级别下的并发问题
作者:temp12138
地址:https://solo.mfyzl.icu/articles/2024/03/19/1710860568070.html

标签:
新一篇: MySQL大量数据插入 旧一篇: Java中的JDNI