当前位置: 首页 > news >正文

Mysql 事务的隔离性(隔离级别)

Mysql 中的事务分为手动提交和自动提交,默认是自动提交,所以我们在Mysql每输入一条语句,其实就会被封装成一个事务提交给Mysql服务端。

手动提交需要先输入begin,表示要开始处理事务,然后就是常见的sql语句操作了,操作完毕以后锁看到的都是临时处理结果,最后需要输入commit才会真正更新到磁盘。


          目录

1、什么是事务

2、事务为什么要有隔离性?

3、隔离级别的分类

(1) 读未提交(Read Uncommitted)

(2) 读提交(Read Committed)

(3) 可重复读(Repeatable Read)

(4) 串行化(Serializable)


1、什么是事务

我们在火车站买票,买票和取票的过程可以看做是一个完整的过程(不可能买了票就走人)。但是站在售票员的角度,有人来买票以及取票需要做两个不同的动作(预定座位和发放纸质车票)

换到Mysql,我们作为用户,我们买到票以后取票,这就是一个事务;站在Mysql的角度,事务不过是多个sql语句的集合,第一条sql语句预定位置,第二条sql语句查询并打印车票。

2、事务为什么要有隔离性?

仍然以买票为例,不同售票窗口虽然服务的是不同用户,但是访问的是同一个数据库,一个窗口刚好在办理售票业务,即预定位置,但是此时突然另一个窗口也要预定位置,这两个并发的业务都要预定位置,但是位置只有一个,但是也不能让这两个业务同时成功。

因此,事务具有隔离性的原因是避免并发带来的不一致性,为防止两个事务相互影响,才有了四种隔离级别。

3、隔离级别的分类

Mysql 下的并发是不可避免的,不同的场景下对并发的接受程度也会不一样,比如买票就不允许两个人买到同一个座位,但如果是商店购物,两个人同时要来结账,依次处理结账事务是完全可以接受的。

依据不同的场景,Mysql允许不同程度的并发干扰,也就是隔离级别,Mysql 下的隔离级别有4种:

  • 读未提交  【Read Uncommitted】
  • 读提交      【Read Committed】
  • 可重复读  【Repeatable Read】
  • 串行化     【Serializable】

(1) 读未提交(Read Uncommitted

意义:在该隔离级别下,可以看到其他事务尚未提交的执行结果。

存在的问题:这种情况下其他事务会受到临时执行结果的影响,如果线程B读取到线程A没有提交的事务,我们称之为“脏读”。这种级别相当于没有隔离性,因为线程A在提交事务之前随时都可以取消当前事务。

注意:一个事务在执行中,读到另一个执行中事务的更新(或其他操作)但是未commit的数据,这种现象叫做脏读

(2) 读提交(Read Committed

意义:该隔离级别是大多数数据库的隔离级别(不是MySQL默认的)。一个事务可以读取到其他事务提交以后的结果(或者说事务处理结束的结果)

存在的问题:这种情况下存在一定的问题,比如事务线程B执行到某个 if 判断语句,其他事务把当前 if 语句的判断条件改变了,这就直接影响到了当前事务的逻辑判断。我们把这种情况称为“不可重复读”。

(3) 可重复读(Repeatable Read

意义:MySQL默认的隔离等级,当前正在执行的事务无法看到其他事务的任何执行结果(无论是临时还是提交结果),直至当前事务提交(执行结束)。一定程度上解决了上面读提交引起的“不可重复读”问题。

注意事项:其他事务 insert 的数据可以被当前正在执行的事务读取到,导致查询时会多出新的记录,这种现象叫做“幻读”,如果出现了幻觉一般。但是MySQL在该级别下是解决了幻读问题的,采用的方式为 Next-Key 锁。

(4) 串行化(Serializable

意义:所有的事务按照顺序依次处理,不会存在并发问题,但是效率极低。一般不会采用

http://www.lryc.cn/news/21115.html

相关文章:

  • 2023年网络安全竞赛——Python渗透测试PortScan.py
  • 【数据结构】栈的接口实现(附图解和源码)
  • LC-1255. 得分最高的单词集合(回溯)
  • 从中国文化看面试挑人标准
  • 谦卑对象设计模式
  • QML Animation动画详解
  • C#开发的OpenRA的加载界面边框的细节
  • 计算机网络笔记、面试八股(四)—— TCP连接
  • Centos7 安装jenkins java1.8版本
  • 【每日阅读】JS知识(三)
  • Vue(6)
  • Neo4j列表函数
  • 55. 跳跃游戏
  • typedef在c语言中的作用
  • 计算机网络体系结构及分层参考模型
  • LLVM程序分析与编译转换框架论文分享
  • 《程序员思维修炼》速读笔记
  • 【Hello Linux】进程概念
  • Bunifu.UI.WinForms 6.0.2 Crack
  • 学习 Python 之 Pygame 开发魂斗罗(五)
  • LeetCode 104. 二叉树的最大深度
  • pandas 中如何按行或列的值对数据排序?
  • 「牛客网C」初学者入门训练BC139,BC158
  • 【深度学习】线性回归、逻辑回归、二分类,多分类等基础知识总结
  • 【MySQL】调控 字符集
  • FME+YOLOV7写DNF自动刷图脚本
  • Java语法面试题
  • location
  • 简述RBAC模型
  • 倒计时2天:中国工程院院士谭建荣等嘉宾确认出席,“警务+”时代来临...