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)
意义:所有的事务按照顺序依次处理,不会存在并发问题,但是效率极低。一般不会采用
Mysql 事务的隔离性(隔离级别)相关推荐
- 【MySQL】事务及其隔离性/隔离级别
目录 一.事务的概念 1.事务的四种特性 2.事务的作用 3.存储引擎对事务的支持 4.事务的提交方式 二.事务的启动.回滚与提交 1.准备工作:调整MySQL的默认隔离级别为最低/创建测试表 2.事 ...
- 粗谈MySQL事务的特性和隔离级别
网上对于此类的文章已经十分饱和了,那还写的原因很简单--作为自己的理解笔记. 前言 此篇文章作为自己学习MySQL的一些个人理解,使用的引擎是InnoDb.首先先讲讲事务的概念,在<高性能 ...
- MySQL事务的4种隔离级别
文章目录 1 简介 2 什么是数据库事务? 2.1 事务的四大特性(ACID) 3 并发事务会导致的问题 3.1 本文会使用到的 SQL 语句: 3.1.1 示例表结构 3.1.2 查询事务的默认隔离 ...
- MySQL事务的四种隔离界别以及会造成的问题和解决办法
MySQL事务的特性:原子性.隔离性.持久性.一致性 MySQL四种隔离界别:读未提交.读已提交.可重复度.串行化 一.读未提交(read uncommitted): 读未提交:那个问题都不能解决.容 ...
- MySQL事务的四种隔离级别,mysql中的不可重复读和幻读的区别,Repeatable read可重复读隔离级别下怎么不存在幻读问题?
1. 事务的隔离级别 1.1 read uncommited:读未提交.一个事务读到了另一个事务未提交的脏数据,称之为脏读. 1.2 read commited:读已提交.解决了脏读问题,但当前事务两 ...
- MySQL事务的特性及事务隔离级别演示
事务的概述 事务的概念 事务:指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败. MySQL中的事务管理 环境准备 create table account( id in ...
- MySQL 事务 :ACID、并发带来的问题、事务的隔离级别、事务的实现
文章目录 ACID 原子性 一致性 持久性 隔离性 并发带来的隔离问题 幻读(虚读) 不可重复读 脏读 丢失更新 隔离级别 Read Uncommitted (读未提交) Read Committed ...
- 什么是事务?事务的基本操作、事务的隔离性问题、事务的ACID特性
文章目录 1.什么是事务? 2.事务的基本操作 2.事务操作的注意事项 3.事务的隔离级别 3.1 无隔离性的问题 3.1.1 脏读 3.1.2 不可重复读 3.1.3 幻读 3.2 事务的隔离级别 ...
- 超详细图解!【MySQL进阶篇】MySQL事务和锁
ACID 特性 在关系型数据库管理系统中,一个逻辑工作单元要成为事务,必须满足这 4 个特性,即所谓的 ACID: 原子性(Atomicity).一致性(Consistency).隔离性(Isolat ...
- java mysql 事物_java基础之MySQL事务和视图
第三节 事务和视图 3.1事务 事务是用来维护数据库完整性的,它能够保证一系列的MySQL操作要么全部执行,要么全不执行.举一个例子来进行说明,例如转账操作:A账户要转账给B账户,那么A账户上减少的钱 ...
最新文章
- 科技基建,自主创芯——详解全球半导体制造行业格局
- net core 使用 rabbitmq
- Caffe代码导读(5):对数据集进行Testing
- c++11 auto 类型说明符详解
- Spark RDD并行度与分区设置
- strcpy和memcpy的区别?
- Dynamics 365 CRM 开发架构简介
- 4-2 VGGNet
- 用Python一键生成炫酷九宫格图片,火了朋友圈
- Dokcer使用总结(Dockerfile、Compose、Swarm)
- Linux_shell 学习
- java反射——构造方法
- VOS防盗打,防攻击的一些看法
- LINUX实验---网络管理
- antd table组件 表格内换行
- Android 11 正式发布:更方便的操作和更安全的隐私
- html5光线传感器,光线传感器是什么
- ICTCLAS的JNI调用接口说明
- 计算机专业男人喜欢什么样的女人,说实在的,其实男人真正喜欢的女人,就三个特征...
- M1 Mac使用photoshop液化、存储为web格式黑屏如何解决