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 前言: 我们都知道事务的几 ...
随机推荐
- 搭建基于Grafana+Prometheus+Node_exporter的性能监控与分析平台(Linux版)
搭建基于Grafana+Prometheus+Node_exporter的性能监控与分析平台(Linux版) 在现代IT环境中,系统监控与分析是确保应用稳定性和高效性的关键.Prometheus与Gr ...
- 识别与防御CSRF漏洞
识别与防御CSRF漏洞 CSRF(Cross-Site Request Forgery,跨站请求伪造),通常也被称为"一键攻击"或"会话劫持",其缩写为CSRF ...
- Kali 安装并配置 Nessus
Kali 安装并配置 Nessus 安装 Nessus 创建nessus文件夹 sudo mkdir /opt/nessus 下载 Nessus ( https://www.tenable.com/d ...
- redis启停shell脚本
启停脚本(redis-5.0.5) 一.编辑脚本 vim /u01/redis/redisServer.sh #!/bin/sh # # Simple Redis init.d script conc ...
- Luogu P3059 Concurrently Balanced Strings G 题解 [ 紫 ] [ 线性 dp ] [ 哈希 ] [ 括号序列 ]
模拟赛搬的题,dp 思路很明显,但难点就在于找到要转移的点在哪. 暴力 首先我们可以先考虑 \(k=1\) 的情况,这应该很好想,就是对于每一个右括号,找到其匹配的左括号,然后进行转移即可,这个过程可 ...
- 重磅发布!DeepSeek 微调秘籍揭秘,一键解锁升级版全家桶,AI 玩家必备神器!
DeepSeek V3/R1 火爆全网,基于原始模型的解决方案和 API 服务已随处可见,陷入低价和免费内卷. 如何站在巨人肩膀上,通过后训练(post-training)结合专业领域数据,低成本打造 ...
- 从android中删除短信
代码如下: getContentResolver().delete(Uri.parse("content://sms/#"),"address=?", new ...
- Java8 使用 stream().filter()过滤List对象等各种操作
内容简介 本文主要说明在Java8及以上版本中,使用stream().filter()来过滤一个List对象,查找符合条件的对象集合. list.stream().mapToDouble(User:: ...
- zabbix - [01] 概述
参考:Zabbix教程(Zabbix监控系统精讲) 一.监控介绍 Cacti Cacti 是一套基于PHP.MySQL.SNMP以及RRD Tool开发的监测图形分析工具,Cacti 是使用轮询的方式 ...
- 机器学习 | 强化学习(5) | 价值函数拟合(Value Function Approximation)
价值函数拟合(Value Function Approximation) 导论(Introduction) 目前的价值函数都是基于打表法(lookup table)进行穷举 对于所有状态\(s\)都有 ...