何为“
事务管理
”?
“事务”是一个逻辑单元,其中包含一系列的操作,事务遵循4个基本特性(ACID):
-
Atomic(原子性,此处指的是事务中的各个操作不可分割)
事务中包含的操作被看作是一个逻辑单元,这个单元中的操作要么全部成功,要么就全部失败;
意味着:只有合法的数据可以被写入数据库,如果数据有任何不符合要求的,则事务应该将其会滚到最初状态;
允许多个用户对同一数据的并发访问,而不破坏数据的正确性和完整性,同时,并行事务的修改必须与其他并行事务的修改相互独立;可以这样理解,一个事务的数据要么是另外一个事务修改这些事务之前的状态,要么是第二个事务已经修改完成的数据,但是这个事务不能够看到其他事务正在修改的数据;
事务结束后,事务必须要得到固化(将其存储到数据库里,或保存到某硬件设备里);
何为“
数据库事务管理隔离等级
”?
事务隔离指的是:数据库(或其他事务系统)通过某种机制,在并行的多个事务之间进行分隔,使每个事务在其执行过程中保持独立;
Hibernate中的事务隔离依赖于底层数据库提供的事务隔离机制,因此对数据库事务隔离机制的理解在基于Hibernate实现的持久层中同样适用;
数据操作过程中可能出现的3种不确定情况:
脏读取(Dirty Reads)
:一个事务读取了另一个事务为提交的数据;
不可重复读取(Non-repeatable Reads)
:一个事务再次读取之前曾读取过的数据时,发现该数据已经被另一个已提交的事务修改;
虚读(Phantom Reads)
:一个事务重新执行一个查询,返回一套符合查询条件的记录,但这些记录中包含了因为其他最近提交的事务而产生的新记录;
为了避免上面3中情况发生,标准的SQL规范中,定义了4个事务隔离等级;
Read Uncommitted:
最低等级的事务隔离,仅仅保证了读取数据中不会读到非法数据,这种等级下,上述的不确定情况均可能发生;(很容易出现脏读取);
Read Commited:
此级别的事务隔离保证一个事务不会读到另一个并行事务已修改但未提交的数据,此等级已经避免了脏读取的情况;(当一个事务处于在此隔离等级中,一个Select查询只能看到查询开始之前提交的数据,永远看不到为提交的数据,或者运行时提交的数据);
Repeatable Read:
此级别的事务隔离避免了“脏读取”和“不可重复读取”现象的出现,意味着:一个事务不可能更新已经由另一个事务读取但未提交的(回滚)的数据;[一般情况下,此级事务应用并不广泛,不能保证数据的合法性(可能会出现虚读),但是性能代价较大,如果当前数据库由应用所独享,可以考虑用“乐观锁”达到同样的目的];
Serializable:
最高登记的事务隔离级别,提供了最严格的隔离机制,上面的3种情况都将会避免掉,这个级别模拟事务的串行执行,逻辑上如同所有事务都处于一个执行队列,依次串行执行,而非并行执行;[此事务隔离级别提供了最严密的隔离机制,但是同时也带来了高昂的性能开销,需谨慎使用,如果需要,可以通过“悲观锁”来解决];
隔离等级 |
脏读取 |
不可重复读取 |
虚读 |
Read Uncommitted |
可能 |
可能 |
可能 |
Read Commited |
不可能 |
可能 |
可能 |
Repeatable Read |
不可能 |
不可能 |
可能 |
Serializable |
不可能 |
不可能 |
不可能 |
分享到:
相关推荐
- 面向切面编程(AOP),它提供了一种将横切关注点(例如日志、事务管理等)从业务逻辑中分离出来的方式。 - 控制反转(IoC),这是一种设计模式,用于实现组件之间的依赖关系,降低程序的耦合性。 - 依赖注入(DI)...
【Oracle安装-卸载-初识Oracle-笔记】 Oracle是一种广泛应用的关系型数据库管理系统,尤其在企业级应用中占据重要地位。对于初次接触Oracle的人来说,理解其安装、卸载过程及基本操作是至关重要的。 一、下载地址 ...
它提供了一个分层架构,包括数据访问、控制层、业务服务、事务管理等多个组件,简化了Java EE(Enterprise Edition)应用程序的开发。Spring框架的核心是IoC容器,它负责管理对象的生命周期和对象之间的依赖关系。 ...
根据提供的文档信息,我们可以总结出以下关于MySQL数据库中事务处理的相关知识点: ### 一、选择题解析 #### 1. 开启事务的SQL语句 - **正确答案**:B、`START TRANSACTION;` - **解析**:在MySQL中,使用`START ...
3. **数据层**:数据访问(Data Access)和数据集成(Data Integration)涵盖了对数据库的访问,如JDBC、ORM框架(如Hibernate)和数据事务管理。 4. **Web层**:Spring MVC是Spring框架在Web开发中的核心组件,提供了...
2. **面向切面编程**:AOP是Spring用来解决横切关注点的一种方式,比如日志记录、事务管理、安全性等。它将这些关注点从核心业务逻辑中分离出来,提高了代码的复用性和可维护性。 3. **模块化设计**: - **数据...
### 头歌初识Redis知识点详解 #### 一、Redis基础知识概述 Redis是一种开源的、高性能的键值存储系统,以其快速的数据存取速度而著称。它支持多种数据结构,能够满足不同的应用场景需求。 - **数据库管理**: - ...
1. **配置文件**:MyBatis 的核心配置文件是 `mybatis-config.xml`,它定义了数据源、事务管理器等全局设置。同时,它还包含对映射文件的引用,映射文件中包含了具体的 SQL 映射信息。 2. **SqlSessionFactory**:...
1. **创建核心配置文件**:这是 MyBatis 的基础,用于配置数据库连接信息、事务管理等。 2. **创建实体类**:根据数据库表结构,创建相应的 Java 实体类。 3. **创建 Mapper 配置文件**:为每个实体类创建对应的 ...
通过JDBC,我们可以执行SQL语句、处理结果集、事务管理等数据库操作。 接下来,让我们逐个分析描述中的四个关键点: 1. **确定连接的数据库是哪一个**:在使用JDBC之前,你需要知道要连接的数据库类型。例如,这里...
SpringBoot与JPA和MyBatis等ORM框架集成良好,提供了便捷的数据访问和事务管理功能。例如,使用`spring-boot-starter-data-jpa`可以轻松连接到各种数据库并使用JPA进行操作。 9. **安全处理** `spring-boot-...
### 性能测试初识详解 #### 一、性能测试概览 性能测试是一种通过自动化工具模拟各种工作负载条件下的测试活动,旨在评估系统在正常、高峰和异常情况下的表现。这种测试的主要目的是识别并消除可能存在的性能瓶颈...
4. **事务管理**: 内置事务处理机制,简化事务控制。 **六、Hibernate 3.6的新特性** - 支持JPA 2.0规范,提供更丰富的查询API。 - 改进了HQL和Criteria API,支持更多的SQL功能。 - 性能优化,包括查询缓存和结果...
### Zookeeper初识 #### 一、分布式一致性问题概述 在分布式系统中,为了提高系统的可用性和性能,通常会采用数据复制技术。然而,数据复制也会带来一致性问题,即不同节点间的数据副本可能不一致。例如,当客户端...
在Android开发中,SQLite是一个非常重要的组成部分,它是一个轻...在实际项目中,应根据需求设计合理的数据库结构,并合理运用SQL语句进行数据操作,同时注意性能优化,如使用事务处理批量操作,避免频繁的数据库读写。
MySQL是一种广泛使用的开源关系型数据库管理系统,对于初学者而言,它是了解数据库管理和数据存储的一个理想起点。本文将围绕MySQL的基础知识展开,包括数据库的基本概念、作用,以及如何通过SQL语句进行数据库和表...
1. 加载配置:Mybatis首先加载配置文件(mybatis-config.xml),包括数据源、事务管理器等信息。 2. 创建SqlSessionFactory:基于配置信息,Mybatis会创建SqlSessionFactory实例。 3. 获取SqlSession:通过...
5. **事务管理**:MyBatis提供了一种简单的事务管理方式,可以在配置文件中设置手动或自动提交,帮助开发者控制数据库事务。 6. **缓存机制**:MyBatis内置了两级缓存,一级缓存是SqlSession级别的,二级缓存可以...