mysql-事务隔离级别
事务的隔离级别比我们想象的还要复杂,在sql标准中一共定义了4中隔离级别,每一种都定义了事务所做的的修改,比如哪些事务内和事务间是可见的,哪些是不可以见的。下面是四种事务的隔离级别:
1、读未提交(Read UnCommited)
在此事务内已经修改了数据,但是没有提交事务,对其他事务都是可见的,其他事务可以读取到刚才那个修改数据没有提交的事务。我们称为这种为 “脏读”。这种可能导致很多问题出现,在一般的实际应用中很少使用。
2、读已提交(Read Commited)
这个事务隔离级别是大多数数据库默认采用的事务隔离级别,但是mysql没有默认采用,在一个修改的事务,还没有提交事务,对于其他事务内的操作都是不可见的。也就是一个事务只能看到已经提交事务的数据。这种我们称为“不可重复读”,因为2此读取的时候可能得到不同的结果。
3、可重复读(Repeatable Read)
可重复读解决了脏读的问题,该隔离级别保证在一个事务里读取的数据记录是一致的,但是理论上又会出现幻读的问题发生,比如我们在读取某个访问记录,另外一个事务正好插入数据了。之前的那个事务再次读取会产生幻行。值得庆幸的是mysql采用的Innodb 和XtraDB存储引擎通过多版本进行并发控制的,来解决这个幻读问题。
4 可串行化(Serializable)
强制事务进行串行化执行,读取的每一行都加锁,避免幻读现象产生可能导致锁的争夺和超时消耗,是事务隔离级别最大的一个,一般在实际的项目中很少用到。
多版本并发控制
mysql 的大多数数据库事务存储引擎大多不是简单的行级锁,基于提高并发性考虑,一般采用多版本控制实现,不仅仅是mysql ,oracle也是如此,可以认为多版本并发控制是行级别锁的变种,大多情况下避免了加锁的操作,因此开销更低,大部分实现非阻塞的读操作,和写操作也只锁定必要的行。多版本并发控制通过保存数据在某个时间点的快照来实现的,也就是说,不管执行多长时间,每个事务看到的数据是一致的,根据事务的开始时间不同,每个事务对应同一张表,同一时刻可能看到的数据不一样。实现版本并发控制包括乐观并发控制和悲观并发控制。
InnoDB存储引擎是通过每一行记录后面保存两个隐藏的列来实现的,默认采用可重复读隔离级别。这两列,一列保存行的创建时间,另外一列保存行的过期时间,时间不是系统时间 而是系统版本号,每当开始一个事务系统版本号就会开始递增,事务开始的时刻的系统版本号作为事务的版本号,与用来查询到的每行记录的版本号进行做对比,在可重复读的隔离级别的下版本并发控制解决幻读的问题:
SELECT(查询)
innodb 会根据只查询早于当前事务查询的版本号的数据行并且行的过期时间(删除版本号)要么未定义要么大于当前版本号才能返回查询结果。
INSERT(插入)
InnoDB为新插入的每一行记录保存当前系统版本号作为行版本号
UPDATE(更新)
InnoDB为插入一行新记录,保存当前版本号作为开始时间的版本号,同时,保存当前版本号到原来行的结束列作为行删除标识。
DELETE (删除)
Innodb 为每一行要删除的行,保存当前版本号作为行删除标识。
总结
InnoDB存储引擎使每一行记录保存额外的两个系统版本号列,使大多读操作都可以不加锁,这样设计使读操作非常简单,性能很好防止了幻读的情况发生,但是每一行要维护2列系统版本号需要额外的空间,并且也要进行检查工作及一些维护的操作。
相关推荐
MySQL事务隔离级别是数据库管理系统中一个非常重要的概念,它关系到数据的一致性和并发性能。在MySQL中,事务被用于确保数据库操作的原子性、一致性、隔离性和持久性(ACID特性)。事务隔离级别主要涉及四个方面:读...
查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别
三、MySQL事务隔离级别 MySQL通过设置不同的事务隔离级别来解决并发问题。隔离级别越高,并发性能越低,但数据一致性越好。 1. 读未提交(read-uncommitted):允许事务读取未提交的数据,不能防止脏读,是最宽松的...
深入理解Mysql事务隔离级别与锁机制 Mysql事务隔离级别与锁机制是数据库系统中非常重要的概念,它们都是为了解决多事务并发问题而设计的。下面我们将深入讲解这些机制,让大家彻底理解数据库内部的执行原理。 事务...
这些改进包括增强的查询性能、新的数据类型、JSON字段的增强操作、更好的事务处理和隔离级别,以及更强大的安全特性。 ### 安装前准备 在安装MySQL 8.0.20之前,确保系统已经满足以下先决条件: 1. **操作系统**:...
例如,InnoDB存储引擎得到显著改进,支持更大的表空间,提高了并发处理能力,并且支持更多的事务隔离级别。此外,它还增强了SQL查询的性能,特别是对于大型数据集的查询。 2. **MySQL安装文件**:`mysql-5.5.28-win...
此外,`mysql-connector-java-8.0.20.jar`还支持多种配置选项,例如设置超时、SSL连接、字符集、事务隔离级别等,以满足不同场景的需求。开发者可以在连接URL中指定这些参数,或者在JDBC连接属性中设置。 总之,`...
动力节点的杜老师讲述的mysql教程,详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性,通过观看可掌握MySQL全套知识。
动力节点的杜老师讲述的mysql教程,详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性,通过观看可掌握MySQL全套知识。
事务隔离级别 课程目标 了解 —— 事务隔离级别的概念; 理解 —— 事务隔离的四种级别; 掌握 —— 事务隔离级别的设置; 事务隔离级别 事务隔离:每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互...
动力节点的杜老师讲述的mysql教程,详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性,通过观看可掌握MySQL全套知识。
MySQL数据库的事务隔离级别是数据库管理系统中用于控制事务处理中并发操作的重要机制。在多用户同时访问数据库的情况下,事务隔离级别能够确保数据的一致性和完整性,避免并发操作带来的各种问题,如脏读、不可重复...
它还支持MySQL的一些高级功能,如分区表、复制、InnoDB事务隔离级别等。 值得注意的是,虽然`5.1.25`是一个较旧的版本,但它是稳定可靠的,并且兼容大多数的Java和MySQL环境。然而,对于新的项目或升级,建议使用...
以下是对MySQL数据库事务隔离级别的详细解释。 1. **丢失更新**:在并发环境下,一个事务的更新可能被另一个事务的更新覆盖,导致前一个事务的更改丢失。 2. **脏读**:一个事务读取到了另一个事务还未提交的数据...
此外,5.1.22版本还包含了对MySQL的一些特定功能的支持,例如InnoDB事务隔离级别、触发器、视图、分区表等。 需要注意的是,随着MySQL版本的更新,`mysql-connector-java`的版本也应该同步升级,以确保兼容性和性能...
- **事务管理**:学习如何在Java中控制数据库事务,包括提交、回滚和隔离级别。 - **连接池**:为了提高性能,可以使用连接池(如C3P0、HikariCP、DBCP)管理数据库连接,避免频繁创建和销毁连接。 - **异常处理*...
9. **事务处理**:支持显式和隐式的事务控制,可以根据业务需求选择合适的事务隔离级别。 10. **执行批处理**:可以一次提交多个SQL语句,提高执行效率。 安装MySQL Connector/Python 2.1.7通常通过Python的包管理...
例如,InnoDB存储引擎的性能得到了显著提升,支持更多事务隔离级别,同时引入了更高效的查询优化器。此外,JSON字段类型被引入,允许存储非结构化数据,增强了对NoSQL场景的支持。还有增强的SQL标准兼容性,包括窗口...
例如,InnoDB存储引擎得到了加强,支持了完全可重复读事务隔离级别,这有助于提高并发处理能力。此外,5.5版本还引入了更好的查询优化器,增强了分区功能,并支持更大的表和索引。 2. **64位与32位的区别**: - `...