版本链

简介: 【8月更文挑战第5天】

和隔离级别密切相关的概念是脏读、幻读和不可重复读 这三个读异常。

  • 脏读:读到了别的事务还没有提交的数据。之所以叫做脏读,就是因为未提交数据可能会被回滚掉。
  • 不可重复读:在一个事务执行过程中,对同一行数据读到的结果不同
  • 幻读:事务执行过程中,别的事务插入了新的数据并且提交了,然后事务在后续步骤里读到了这个新的数据。

用一个表用来描述隔离级别和三种读异常的关系:

理论上,可重复读是没有解决幻读的,但是因为MySQL因为使用了临键锁,因此它的可重复读隔离级别已经解决了幻读问题。

此外还有一个相似的概念:快照读和当前读。
快照读就是在事务开始的时候创建了一个数据的快照,在整个事务过程中都读这个快照;
当前读,则是每次都去读最新数据。

MySQL在可重复读这个隔离级别下,查询的执行效果和快照读非常接近。

为了实现MVCC,InnoDB引擎给每一行都加了两个额外的字段trx_idroll_ptr

  • trx_id:事务ID,也叫做事务版本号。MVCC里面的V指的是这个数字,每一个事务在开始的时候就会获得一个ID,然后这个事务内操作的行的事务ID,都会被修改为这个事务的ID
  • roll_ptr:回滚指针,InnoDB通过roll_ptr把每一行的历史版本串联在一起。

实际上,InnoDB引擎还隐式地插入了另外一个列row_id,如果你没有设置任何主键,那么这个列就会被当作主键来使用。但是它其实和MVCC没太大关系,所以不需要关注。

目录
相关文章
|
8月前
|
运维
【10月更文挑战赛】获奖名单出炉,快来看看谁是十月创作明星!
【10月更文挑战赛】获奖名单出炉,快来看看谁是十月创作明星!
296 9
|
9月前
|
NoSQL 算法 关系型数据库
Redis分布式锁
【10月更文挑战第1天】分布式锁用于在多进程环境中保护共享资源,防止并发冲突。通常借助外部系统如Redis或Zookeeper实现。通过`SETNX`命令加锁,并设置过期时间防止死锁。为避免误删他人锁,加锁时附带唯一标识,解锁前验证。面对锁提前过期的问题,可使用守护线程自动续期。在Redis集群中,需考虑主从同步延迟导致的锁丢失问题,Redlock算法可提高锁的可靠性。
133 4
|
9月前
|
NoSQL Redis 数据库
计数器 分布式锁 redis实现
【10月更文挑战第5天】
129 1
|
9月前
|
存储 NoSQL 安全
GEO类型
【10月更文挑战第9天】
125 0
|
9月前
|
SQL NoSQL 安全
分布式环境的分布式锁 - Redlock方案
【10月更文挑战第2天】Redlock方案是一种分布式锁实现,通过在多个独立的Redis实例上加锁来提高容错性和可靠性。客户端需从大多数节点成功加锁且总耗时小于锁的过期时间,才能视为加锁成功。然而,该方案受到分布式专家Martin的质疑,指出其在特定异常情况下(如网络延迟、进程暂停、时钟偏移)可能导致锁失效,影响系统的正确性。Martin建议采用fencing token方案,以确保分布式锁的正确性和安全性。
135 0
|
9月前
|
人工智能 关系型数据库 Serverless
1024,致开发者们——希望和你一起用技术人独有的方式,庆祝你的主场
阿里云开发者社区推出“1024·云上见”程序员节专题活动,包括云上实操、开发者测评和征文三个分会场,提供14个实操活动、3个解决方案、3 个产品方案的测评及征文比赛,旨在帮助开发者提升技能、分享经验,共筑技术梦想。
1685 161
|
中间件 存储 SQL
分库分表优化:换中间件 二次查询
【7月更文挑战第7天】
89 15
|
12月前
|
算法 数据库
|
人工智能 开发者
7月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区7月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
3235 81
7月更文挑战赛火热启动,坚持热爱坚持创作!
|
12月前
|
编译器 C++ 开发者
C++一分钟之-嵌入式编程与裸机开发
【7月更文挑战第12天】在嵌入式裸机开发中,C++发挥着关键作用,尤其适合高性能和硬件控制。内存管理是核心挑战,推荐静态分配或手动堆栈管理以防止泄漏和碎片。中断处理应快速,仅设置标志,复杂逻辑移至主循环。编译器优化平衡代码大小和效率,但过度优化会牺牲可读性。通过谨慎实践,开发者能驾驭C++的优势。
190 1