数据库的四种隔离级别

  • 事务
    • 指要做或所作的事情,亦指访问并可能更新数据库中各种数据项的一个程序执行单元,事务由事务开始 begin transaction 和 事务结束 end transaction之间的全体操作组成
  • MYSQL事务的四大特性 【ACID】及实现原理
    • 原子性【Atomicity】:事务作为一个整体被执行,包含在其中的数据库的操作要么全部被执行,要么都不执行
    • 一致性【Consistency】:指在事务开始之前和事务结束之后,数据不会被破坏,假如A给B转账10元,不管成功就与否AB的总金额保持不变
    • 隔离性【Isolation】:多个事务并发访问时,事务之间是相互隔离的,即一个事务不影响其它事务运行效果
    • 持久性【Durability】:表示事务完成以后,该事务对数据库所作的操作更改,将持久的保存在数据库之中

在事务并发过程中可能会出现的情况:
脏读:一个事务读取了另外一个事务修改但未提交的数据
不可重复读:在一个事务中,多次读取同一数据但结果不同
幻读:一个事务先后读取一个范围的记录,但两次读取的记录个数不同


数据库的四种隔离级别:
低到高:读未提交、读已提交、可重复读、序列化
1.读未提交(一致性最差):一个事务可以读取另一个未提交事务的数据 【可能发生脏读、不可重复读、幻读】
2.读提交【sqlserver/oracle默认级别】(不加锁,使用快照读):只能读已经提交的内容,解决了脏读的现象,但若另一事务更新了数据库则会出现不可重复读和幻读的现象
3.可重复读【mysql默认级别】(事务开启时不允许其它事务的update操作):可以解决不可重复读问题,但不能解决幻读问题,幻读对应insert/delete操作
4.序列化:即事务串行化运行,可解决脏读、不可重复度、幻读,但执行效率低、性能开销大

  • 隔离级别的实现原理:

    • 使用mysql的默认隔离级别【可重复读】进行说明
    • 每条记录在更新的时候都会同时记录一条回滚操作,回滚操作日志 undo log,同一记录在系统中可以存在多个版本,即数据库的多版本并发控制MVCC,通过回滚操作 rollback操作,可以回到前一个状态的值
    • 假设一个值从1被按顺序改成了2 3 4,在回滚日志里面就会有类似下面的记录
      在这里插入图片描述
    • 同一条记录在系统中可以存在多个版本,就是数据库的多版本并发控制(MVCC)。对于 read-view A,要得到 1,就必须将当前值依次执行图中所有的回滚操作得到

ref:
https://www.cnblogs.com/myseries/p/10748912.html
彻底搞懂 MySQL 事务的隔离级别-阿里云开发者社区 (aliyun.com)
(6 封私信 / 11 条消息) MySQL 面试一般常问问题有哪些? - 知乎 (zhihu.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值