一、什么是事务
事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态。
事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生转换;如果有子事务失败,则其他子事务的数据库操作被回滚,即数据库回到事务执行前的状态,不会发生状态转换。
一致性或可串性:事务的执行使得数据库从一种正确状态转换成另一种正确状态。
隔离性:在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应显示给任何其他事务。
持久性:事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
运行嵌入式SQL应用程序或脚本,在可执行SQL语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit)的过程(在这种情况下,发出的每个单独的SQL语句被看做单个事务,它一执行就被隐式地提交了)。
在大多数情况下,通过执行COMMIT或ROLLBACK语句来终止事务。当执行COMMIT语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了-- 即它们被写到磁盘。当执行ROLLBACK语句时,自从事务启动以来对数据库所做的一切更改都被撤销,并且数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。
一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是须要用户或应用程序来确保每个事务中执行的SQL操作序列始终会导致一致的数据库。
二、数据库系统支持两种事务模式:
自动提交模式:每个SQL语句都是一个独立的事务,当数据库系统执行完一个SQL语句后,会自动提交事务。
手动提交模式:必须由数据库客户程序显示指定事务开始边界和结束边界。
注:MySQL中数据库表分为3种类型:INNODB、BDB和MyISAM,其中MyISAM不支持数据库事务。MySQL中create table 语句默认为MyISAM类型。
三、事务并发问题:
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题,这些并发问题可归纳为以下几类:
第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。
脏读:一个事务读到另一个事务为提交的更新数据。
虚读:一个事务读到另一个事务已提交的新插入的数据。
不可重复读:一个事务读到另一个事务已提交的更新数据。
第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。
四、隔离级别:
当数据库系统采用read Commited隔离级别时,会导致不可重复读喝第二类丢失更新的并发问题,可以在应用程序中采用悲观锁或乐观锁来避免这类问题。从应用程序的角度,锁可以分为以下几类:
Serializable(串行化):一个事务在执行过程中完全看不到其他事务对数据库所做的更新。
Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他事务对已有记录的更新。
Read Commited(读已提交数据):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新
Read Uncomitted(读未提交数据):一个事务在执行过程中可以拷打其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以有优先考虑把数据库系统的隔离级别设为Read Commited,它能够避免脏读,而且具有较好的并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。
当数据库系统采用read Commited隔离级别时,会导致不可重复读喝第二类丢失更新的并发问题,可以在应用程序中采用悲观锁或乐观锁来避免这类问题。从应用程序的角度,锁可以分为以下几类:
A.悲观锁:指在应用程序中显示的为数据资源加锁。尽管能防止丢失更新和不可重复读这类并发问题,但是它会影响并发性能,因此应该谨慎地使用。
B.乐观锁:乐观锁假定当前事务操作数据资源时,不回有其他事务同时访问该数据资源,因此完全依靠数据库的隔离级别来自动管理锁的工作。应用程序采用版本控制手段来避免可能出现的并发问题。
五、悲观锁有两种实现方式。
A.在应用程序中显示指定采用数据库系统的独占所来锁定数据资源。SQL语句:select ... for update,在Hibernate中使用get,load时如session.get(Account.class,new Long(1),LockMode,UPGRADE)
B.在数据库表中增加一个表明记录状态的LOCK字段,当它取值为“Y”时,表示该记录已经被某个事务锁定,如果为“N”,表明该记录处于空闲状态,事务可以访问它。增加锁标记字段就可以实现。
利用Hibernate的版本控制来实现乐观锁
乐观锁是由程序提供的一种机制,这种机制既能保证多个事务并发访问数据,又能防止第二类丢失更新问题。
在应用程序中可以利用Hibernate提供的版本控制功能来视线乐观锁,OR映射文件中的<version>元素和<timestamp>都具有版本控制的功能,一般推荐采用<version>
当一个人找不到出路的时候,最好的办法就是将当前能做好的事情做到极致,做到无人能及。
分享到:
相关推荐
### 数据库事务应用详解 #### 事务处理的重要性与ACID特性 事务处理是现代数据库管理系统(DBMS)中不可或缺的一部分,尤其对于那些涉及复杂业务逻辑、需要确保数据一致性和完整性的应用来说更是如此。事务处理的...
设计时需要考虑数据的冗余、数据依赖和事务处理,以确保数据库的高效运行和数据的一致性。 数据库管理系统(DBMS)是用于创建、维护和管理数据库的软件。常见的DBMS有Oracle、MySQL、SQL Server和MongoDB等。每个...
《分布式数据库系统及其应用(第二版)》由邵佩英编著,是中国科大出版社出版的专业教材,旨在深入探讨分布式数据库系统的理论基础和实际应用。 分布式数据库系统的核心思想是将数据分布在多个物理位置上的独立...
事务处理是数据库中确保数据一致性的重要机制,涉及ACID(原子性、一致性、隔离性、持久性)特性。原子性确保事务要么全部完成,要么全部不完成;一致性保证事务结束后,数据库状态符合业务规则;隔离性防止多个事务...
### Caché数据库及其特性详解 #### 一、Caché数据库概述 Caché数据库是一款高性能的对象数据库系统,由InterSystems公司开发。它在医疗健康行业以及其他对数据处理速度和可靠性有极高要求的领域中得到了广泛...
2. **数据库系统基础**:讲解传统关系数据库的基本原理,包括关系模型、SQL语言、ACID事务属性以及数据库设计的范式理论,以便对比和理解面向对象数据库的优势。 3. **OODBMS架构**:介绍面向对象数据库系统的架构...
1. 数据库事务处理:了解事务的概念、ACID属性(原子性、一致性、隔离性和持久性),以及事务的状态和并发控制。 2. 数据库备份与恢复:学习数据库备份策略,如完全备份、增量备份和差异备份,以及如何进行数据库...
### 数据库事务及锁机制详解 #### 一、事务的概念与特性 事务是数据库系统中一组操作的集合,用于确保数据的一致性和完整性。在事务处理中,事务被视为一个不可分割的工作单元,其中包含的操作要么全部成功,要么...
五、数据库事务与并发控制 在多用户环境下,数据库的事务处理和并发控制至关重要。考生需要理解事务的ACID特性(原子性、一致性、隔离性和持久性),以及并发控制中的锁机制、多版本并发控制(MVCC)等技术,以确保...
本文将深入探讨数据库事务的基本概念、隔离级别及其背后的实现机制,并通过具体的示例帮助理解各种可能发生的异常情况。 #### 二、事务的概念 数据库事务是一组操作的集合,这些操作要么全部成功完成,要么全部...
但是很多开发者对于事务的认识相对片面和肤浅,仅仅把它等同于ACID,不了解数据库系统引入事务的真正动机,ACID对于事务意味着什么以及最重要的:数据库系统是如何保证事务的ACID特性的?因为最近在导师手下做一个微服务...
7. **事务处理**:事务是数据库操作的基本单位,具有原子性、一致性、隔离性和持久性的ACID特性。并发控制和恢复策略是保证多事务同时运行时数据正确性的关键。 8. **数据库安全性**:包括用户权限管理、角色授权、...
面向对象数据库系统及其应用.pdf》这份文档,读者可以深入了解面向对象数据库的原理、特性以及如何在实际项目中有效利用它们。这不仅有助于提升技术能力,也有助于拓展在数据管理和存储领域的视野。
### 数据库事务隔离级别详解 #### 一、引言 在多用户共享的数据库系统中,为了保证数据的一致性和准确性,必须对并发事务进行控制。数据库事务隔离级别是用来管理多个事务之间相互影响的程度,主要解决的问题包括脏...
### 数据库事务管理知识点 #### 一、事务概念与特性 **事务**是数据库系统中一组操作的集合,这些操作被视为一个不可分割的工作单元。事务处理确保数据的一致性和完整性,尤其是在并发环境中。 - **原子性...
4. **数据库设计的内容**:数据库设计通常包括结构特性和行为特性两个方面的内容,其中结构特性关注数据的静态特性,行为特性关注数据的动态特性。 5. **关系操作类型**:根据数学理论,关系操作通常可以分为关系...
### 数据库管理系统及其实现 #### 一、数据库管理系统的基本概念与原理 **数据库管理系统**(Database Management System, DBMS)是一种用于管理和维护数据库的软件系统。它提供了对数据进行存储、检索、更新以及...