MySQL 中的事务隔离级别有哪些?
MySQL 中的事务隔离级别有哪些?
在 MySQL 中,事务隔离级别用于定义一个事务能看到其他事务未提交的数据的程度。MySQL 支持以下四种事务隔离级别,每种级别对并发操作的支持程度和一致性要求不同。隔离级别的设置通常通过 SET TRANSACTION ISOLATION LEVEL 语句来进行。
1. 读未提交(Read Uncommitted)
- 定义:事务可以读取到其他事务未提交的数据,这意味着事务可以看到其他事务的 脏数据。
- 特性:
- 允许 脏读:一个事务可以读取另一个事务修改但尚未提交的数据。
- 不保证事务数据的隔离性。
- 影响:
- 脏读:读取未提交的数据可能导致数据不一致。
- 提供最差的并发控制和一致性,性能较好,但可能引发严重的业务逻辑问题。
2. 读已提交(Read Committed)
- 定义:事务只能读取到其他事务已经提交的数据。即使一个事务在执行过程中多次读取数据,也只能看到其他事务已经提交的数据。
- 特性:
- 允许 脏读 被防止,但仍然允许 不可重复读。
- 每次读取数据时都会重新查询数据库,因此每次读取的结果可能不同。
- 影响:
- 不可重复读:同一事务在两次读取之间可能会看到不同的数据。
- 性能上比 读未提交 要好,但依然无法防止所有的并发问题。
3. 可重复读(Repeatable Read)
- 定义:在事务开始后,事务内的所有查询都将读取到相同的数据,直到事务结束为止,保证了 不可重复读 的避免。
- 特性:
- 允许 幻读,即事务执行期间,其他事务插入的行数据不会被当前事务看到。
- 默认的事务隔离级别(对于 InnoDB 存储引擎而言)。
- 保证了读取的数据一致性,每次读取相同数据时返回的结果相同。
- 影响:
- 不可重复读 被解决,保证数据一致性。
- 幻读 问题仍然存在,多个事务并发执行时,可能会插入新的数据行,导致查询结果不一致。
4. 串行化(Serializable)
- 定义:事务完全隔离,即所有事务都按顺序串行执行,不允许其他事务并发执行。这是最严格的事务隔离级别。
- 特性:
- 会强制事务 加锁,避免了 脏读、不可重复读 和 幻读。
- 通过强制事务之间的完全顺序执行来保证数据的一致性。
- 影响:
- 解决所有并发问题(包括脏读、不可重复读和幻读)。
- 性能极差,因为事务会被强制串行化执行,导致系统吞吐量显著下降。
总结
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| 读未提交 | 允许 | 允许 | 允许 |
| 读已提交 | 不允许 | 允许 | 允许 |
| 可重复读 | 不允许 | 不允许 | 允许 |
| 串行化 | 不允许 | 不允许 | 不允许 |
选择合适的隔离级别
- 在 MySQL 中选择合适的事务隔离级别是根据应用需求来定的。一般来说,高并发系统需要选择较低的隔离级别以提高性能(如 读已提交 或 可重复读),但需要保证数据一致性;而对于数据一致性要求极高的场景,可能选择 串行化,尽管它的性能代价较高。
MySQL 中的事务隔离级别有哪些?的更多相关文章
- 在MySQL中设置事务隔离级别有2种方法:
在MySQL中设置事务隔离级别有2种方法: 1 在my.cnf中设置,在mysqld选项中如下设置 [mysqld] transaction-isolation = READ-COMMITTED 2 ...
- mysql中不同事务隔离级别下数据的显示效果--转载
事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...
- 浅谈mysql中不同事务隔离级别下数据的显示效果
事务的概念 事 务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查 询语句因为崩溃或其他原因而无法执行,那 ...
- mysql中的事务隔离级别
事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典的.经常被拿出来说的例子就是转账了.假如小花要给小白转账1000元,这个转账会涉及到两个关键操作就是:将小花的余额-1000,将小白的余额 ...
- 重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系
重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系 Innodb中的事务隔离级别和锁的关系 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁 ...
- 事务,Oracle,MySQL及Spring事务隔离级别
一.什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种): 原子性 (atomicity):强调事务的不可分割:一致性 (consiste ...
- 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种 ...
- MySQL事物(一)事务隔离级别和事物并发冲突
数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始 ...
- MySQL四种事务隔离级别详解
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...
- Innodb中的事务隔离级别和锁的关系(转载)
nodb中的事务隔离级别和锁的关系 原文:https://tech.meituan.com/innodb-lock.html ameng ·2014-08-20 15:50 前言: 我们都知道事务的几 ...
随机推荐
- 接口性能测试---locust脚本编写(一)
本文分享自天翼云开发者社区<接口性能测试---locust脚本编写(一)>,作者:丁****乐 一.安装 locust是用python编写的一款开源接口性能测试工具,以python3为例, ...
- 安全可信|权威认证!天翼云边缘安全加速平台AccessOne护航企业行稳致远!
8月25日,由中国信息通信研究院(以下简称"中国信通院")和中国通信标准化协会联合主办的2023首届SecGo云和软件安全大会公布了可信安全最新评估结果,天翼云通过"首批 ...
- Q:bash: fork: 无法分配内存,ssh无法连接新会话
老版本系统的内核pid参数比较小(默认设置的是32768) 原因分析,– 内存不足或进程数超出限制– 系统内部的总进程数达到pid_max的上限,创建新进程看到以上提示 查看最大进程数 sysctl ...
- Linux mint的hadoop安装方法
参考网址http://www.powerxing.com/install-hadoop/ 1.创建hadoop账户 这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为 sh ...
- 若依单体Vue版本新增多环境配置
若依框架是一个简单的web后台管理脚手架,基于SpringBoot+Vue开发的.本次更改版本为3.8.7截止2023年8月14日,最新版本! 若依自带只有 application.yml 与 app ...
- Javascript 显示当前滚动条滚动的百分比
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Java 实现 Excel(XLS/ XLSX)和 HTML 格式之间的转换
Excel 是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言.虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,以便更好地利用和展示数据.本文 ...
- 面试官:你是如何进行SQL调优的?
SQL调优是我们后端开发人员面试中的高频考点,也是实际工作中提升数据库性能的关键技能.面对"你是如何进行SQL调优的?"这个问题,你是否能条理清晰地分析问题并提供解决方案? 1. ...
- FUSE,从内核到用户态文件系统的设计之路
FUSE(Filesystem in Userspace)是一个允许用户在用户态创建自定义文件系统的接口,诞生于 2001 年.FUSE 的出现大大降低了文件系统开发的门槛,使得开发者能够在不修改内核 ...
- linux下安装cmake版本
点击查看代码 要在基于ARM的Linux系统上安装CMake 3.19.3版本,你可以按照以下步骤进行操作: 1. **下载CMake 3.19.3版本的ARM架构压缩包**: 你可以从CMake的官 ...