数据库的事务特性和隔离级别

本文深入探讨了数据库事务的四大特性:原子性、一致性、隔离性和持久性,并详细解析了脏读、不可重复读和幻读现象。接着,介绍了四种数据库隔离级别,包括ReadUncommitted、ReadCommitted、RepeatableRead和Serializable,以及它们对并发问题的处理。在MySQL InnoDB中,重点讲解了其对事务隔离级别的支持和MVCC(多版本并发控制)的工作原理,以及快照读和当前读的概念。此外,还概述了InnoDB的锁类型,为理解数据库并发提供了全面的知识框架。

一. 事务特性

  1. 原子性:事务包含的所有操作要么都成功,要么都失败;
  2. 一致性:事务操作数据的变化,前后保持一致状态,比如5000块钱,转出去2000,就必须剩下3000;
  3. 隔离性:基于事务隔离级别,事务之间操作互不影响;
  4. 持久性:事务提交后,数据更新进数据库,不会因为任何原因丢失提交事务的操作;

​​​​二.名称解释

  1. 脏读:事务之间读取到未提交的数据;
  2. 不可重复读:查询同一条数据,多次读取时,该数据列值发生变化,在这此期间,其他事务可以更新该条数据;
  3. 幻读:查询同一范围内的多条数据,多次读取时,该范围内的数据行数发生了变化,其他事务可以新增删除数据;

 注意:不可重复读和幻读的区别

三.数据库隔离级别

  1. Read Uncommitted (读未提交数据):一般不使用,可以读取到事务未提交的数据(脏读,不可重复度,幻读);
  2. Read Committed (读已提交数据):大多数数据库默认的隔离级别,读取事务提交后的数据(不可重复度,幻读);
  3. Repeatable Read (可重复读):mysql默认的隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行(幻读);可重复读隔离级详细分析
  4. Serializable (串行化):强制事务排序,使之不可能相互冲突(无);

四.MySQL InnoDB对隔离级别的支持

五.实现事务隔离的两大方案

第一种,读取数据的时候,锁定我们要操作的数据,不允许其他事务修改就行了。这种方案我们叫做基于锁的并发控制Lock Based Concurrency Control(LBCC)

第二种,在修改数据的时候给它建立一个备份或者叫快照,后面再来读取这个快照就行了。这种方案我们叫做多版本的并发控制Multi Version Concurrency Control(MVCC)
MVCC的核心思想是:可以查到在当前事务之前已经存在的已提交的数据,即使它在后面被其他事务修改或者删除了,和之前查到的数据还是一样,不会改变,在当前事务之后新增的数据,我是查不到的。可以看一下这个简化的模型来理解MVCC简化模型

MVCC的查找规则: 只能查找创建时间小于等于当前事务ID的数据,和删除时间大于当前事务ID的行(或未删除)。你在一个事务t1中进行了一次查询,在t1之后的事务中更新的数据和插入的数据,在t1中都查不到,如果在t1之后的事务中删除数据,那么在t1中再查的话,就没有删除的数据了(自行在mysql数据库测试时,使用默认事务隔离级别,依旧能查到被 删除时间大于当前事务ID的其他事务 删除的数据,然后更新操作无效,提交事务后查询,此时查询没有删除的数据)

在MVCC并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read)。快照读,读取的是记录的可见版本 (有可能是历史版本),不用加锁。当前读,读取的是记录的最新版本,并且,当前读返回的记录,都会加上锁,保证其他事务不会再并发修改这条记录。

六.MySQL InnoDB锁的基本类型

// TODO https://www.bilibili.com/video/BV1KW411u7vy

 

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值