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)

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

Mysql 事务的隔离性(隔离级别)相关推荐

  1. 【MySQL】事务及其隔离性/隔离级别

    目录 一.事务的概念 1.事务的四种特性 2.事务的作用 3.存储引擎对事务的支持 4.事务的提交方式 二.事务的启动.回滚与提交 1.准备工作:调整MySQL的默认隔离级别为最低/创建测试表 2.事 ...

  2. 粗谈MySQL事务的特性和隔离级别

    网上对于此类的文章已经十分饱和了,那还写的原因很简单--作为自己的理解笔记. 前言 ​  此篇文章作为自己学习MySQL的一些个人理解,使用的引擎是InnoDb.首先先讲讲事务的概念,在<高性能 ...

  3. MySQL事务的4种隔离级别

    文章目录 1 简介 2 什么是数据库事务? 2.1 事务的四大特性(ACID) 3 并发事务会导致的问题 3.1 本文会使用到的 SQL 语句: 3.1.1 示例表结构 3.1.2 查询事务的默认隔离 ...

  4. MySQL事务的四种隔离界别以及会造成的问题和解决办法

    MySQL事务的特性:原子性.隔离性.持久性.一致性 MySQL四种隔离界别:读未提交.读已提交.可重复度.串行化 一.读未提交(read uncommitted): 读未提交:那个问题都不能解决.容 ...

  5. MySQL事务的四种隔离级别,mysql中的不可重复读和幻读的区别,Repeatable read可重复读隔离级别下怎么不存在幻读问题?

    1. 事务的隔离级别 1.1 read uncommited:读未提交.一个事务读到了另一个事务未提交的脏数据,称之为脏读. 1.2 read commited:读已提交.解决了脏读问题,但当前事务两 ...

  6. MySQL事务的特性及事务隔离级别演示

    事务的概述 事务的概念 事务:指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败. MySQL中的事务管理 环境准备 create table account( id in ...

  7. MySQL 事务 :ACID、并发带来的问题、事务的隔离级别、事务的实现

    文章目录 ACID 原子性 一致性 持久性 隔离性 并发带来的隔离问题 幻读(虚读) 不可重复读 脏读 丢失更新 隔离级别 Read Uncommitted (读未提交) Read Committed ...

  8. 什么是事务?事务的基本操作、事务的隔离性问题、事务的ACID特性

    文章目录 1.什么是事务? 2.事务的基本操作 2.事务操作的注意事项 3.事务的隔离级别 3.1 无隔离性的问题 3.1.1 脏读 3.1.2 不可重复读 3.1.3 幻读 3.2 事务的隔离级别 ...

  9. 超详细图解!【MySQL进阶篇】MySQL事务和锁

    ACID 特性 在关系型数据库管理系统中,一个逻辑工作单元要成为事务,必须满足这 4 个特性,即所谓的 ACID: 原子性(Atomicity).一致性(Consistency).隔离性(Isolat ...

  10. java mysql 事物_java基础之MySQL事务和视图

    第三节 事务和视图 3.1事务 事务是用来维护数据库完整性的,它能够保证一系列的MySQL操作要么全部执行,要么全不执行.举一个例子来进行说明,例如转账操作:A账户要转账给B账户,那么A账户上减少的钱 ...

最新文章

  1. 科技基建,自主创芯——详解全球半导体制造行业格局
  2. net core 使用 rabbitmq
  3. Caffe代码导读(5):对数据集进行Testing
  4. c++11 auto 类型说明符详解
  5. Spark RDD并行度与分区设置
  6. strcpy和memcpy的区别?
  7. Dynamics 365 CRM 开发架构简介
  8. 4-2 VGGNet
  9. 用Python一键生成炫酷九宫格图片,火了朋友圈
  10. Dokcer使用总结(Dockerfile、Compose、Swarm)
  11. Linux_shell 学习
  12. java反射——构造方法
  13. VOS防盗打,防攻击的一些看法
  14. LINUX实验---网络管理
  15. antd table组件 表格内换行
  16. Android 11 正式发布:更方便的操作和更安全的隐私
  17. html5光线传感器,光线传感器是什么
  18. ICTCLAS的JNI调用接口说明
  19. 计算机专业男人喜欢什么样的女人,说实在的,其实男人真正喜欢的女人,就三个特征...
  20. M1 Mac使用photoshop液化、存储为web格式黑屏如何解决

热门文章

  1. 小程序影藏溢出的gif_视频转gif怎么弄?视频片段转动图 将影视片段制作成微信表情包的方法~...
  2. MT6737/MT6737T/MT6737M处理器参数差异分析资料
  3. 三种POSS材料(乙烯基POSS、氨基POSS和苯基POSS)
  4. pdf转换成jpg转换器教程
  5. android ntfs u盘,NTFS让U盘短命?想多了
  6. 全链路压测那点事(一)
  7. github网站扩展增强
  8. HTML代码格式化工具
  9. 美女为什么美?????
  10. 淘宝电商创业可能会面临哪些问题?