`
Fred_Han
  • 浏览: 148128 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

浅谈数据库事务

 
阅读更多

一、事务的定义

 

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。

 

二、事务的特征

 

原子性:保证事务中的所有操作全部执行或全部不执行。例如执行转账事务,要么转账成功,要么失败。成功,则金额从转出帐户转入到目的帐户,并且两个帐户金额将发生相应的变化;失败,则两个账户的金额都不变。不会出现转出帐户扣了钱,而目的帐户没有收到钱的情况。


一致性:保证数据库始终保持数据的一致性——事务操作之前是一致的,事务操作之后也是一致的,不管事务成功与否。如上面的例子,转账之前和之后数据库都保持数据上的一致性。


隔离性:多个事务并发执行的话,结果应该与多个事务串行执行效果是一样的。显然最简单的隔离就是将所有事务都串行执行:先来先执行,一个事务执行完了才允许执行下一个。但这样数据库的效率低下,如:两个不同的事务只是读取同一批数据,这样完全可以并发进行。为了控制并发执行的效果就有了不同的隔离级别。下面将详细介绍。


持久性:持久性表示事物操作完成之后,对数据库的影响是持久的,即使数据库因故障而受到破坏,数据库也应该能够恢复。通常的实现方式是采用日志。

 

三、为何引入事务

1、数据完整性   

2、数据安全性   

3、充分利用系统资源,提高系统并发处理的能力

 

四、为什么需要对事务并发控制

 

更新丢失Lost update:两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。


脏读Dirty Reads:一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作都被回滚。


不可重复读Non-repeatable Reads:一个事务对同一行数据重复读取两次,但是却得到了不同的结果。
二次更新问题Second lost updates problem:无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成第一次写操作失效。


不可重复读Phantom Reads:事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据(这里并不要求两次查询的SQL语句相同)。这是因为在两次查询过程中有另外一个事务插入数据造成的。

 

五、数据库的隔离级别

 

为了兼顾并发效率和异常控制,在标准SQL规范中,定义了4个事务隔离级别,事务准备接受不一致数据的级别称为隔离级别。隔离级别是一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。应用程序要求的隔离级别确定了所使用的锁定行为:


Read Uncommitted:直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别的事务可以读到这个改变.这是很不安全的.


Read Committed:直译就是"读提交",意思就是语句提交以后即执行了COMMIT以后别的事务就能读到这个改变.


Repeatable Read:直译就是"可以重复读",这是说在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的.


Serializable:直译就是"序列化",意思是说这个事务执行的时候不允许别的事务并发执行.

 

六,隔离级别与锁

 

隔离级别越高越能保证数据完整性和一致性,但是对并发性能影响也越大。
对于多数应用程序,可以优先考虑把数据库系统隔离级别设为Read Committed ,它能够避免脏读取而且具有较好并发性能。
尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制 。
锁(Lock) 是在多用户环境下对资源访问的一种限制。机制当对一个数据源加锁后,
此数据源就有了一定的访问限制。我们就称对此数据源进行了“锁定”。
为了处理这些问题,SQL标准定义了以下几种事务隔离级别
READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。
READ COMMITTED 允许幻想读、不可重复读,不允许脏读
REPEATABLE READ 允许幻想读,不允许不可重复读和脏读
SERIALIZABLE 幻想读、不可重复读和脏读都不允许


Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。所以Oracle不支持脏读
SQL标准所定义的默认事务隔离级别是SERIALIZABLE,但是Oracle 默认使用的是READ COMMITTED
设置隔离级别使用 SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]

 

分享到:
评论

相关推荐

    浅谈数据库事务四大特性

    数据库事务是数据库操作的核心组成部分,它确保了数据库在多用户环境下的稳定性与可靠性。事务的四大特性,也被称为ACID属性,是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性...

    浅谈数据库中事务处理和并发控制技术

    浅谈数据库中事务处理和并发控制技术 数据库事务处理和并发控制是数据库管理系统(DBMS)中的核心技术, Guarantees 数据库的可靠性和一致性。本文将详细介绍数据库事务处理和并发控制技术的概念、特性和实现机制。...

    浅谈分布式事务实现技术及应用场景探讨.pdf

    "浅谈分布式事务实现技术及应用场景探讨" 分布式事务是指在分布式系统中,多个节点之间的数据访问和更新操作集合,需要保证事务的原子性、一致性、隔离性和持久性。随着软件系统支持用户数的不断提高,对其架构的...

    浅谈SQL数据库备份.pdf

    "浅谈SQL数据库备份.pdf" 本文将对SQL Server数据库备份进行详细介绍,包括根据数据库向导备份数据库、脚本备份数据库、通过数据库代 理服务器自动备份数据库及通过导出数据库结构和数据脚本备份数据库四种方法。 ...

    浅谈ORACLE数据库的性能优化.pdf

    数据缓冲区存储从数据文件读取的数据,日志缓冲区用于记录事务日志,而共享池则用于SQL和PL/SQL的解析、编译和执行,包括库缓存、数据字典缓存和用户全局区。 2. 初始参数调整 通过初始化参数如DB_BLOCK_SIZE可以...

    从运维角度浅谈MySQL数据库优化 数据库运维.pdf

    《从运维角度浅谈MySQL数据库优化》 MySQL数据库在企业应用中扮演着至关重要的角色,其性能直接影响到系统的响应速度和用户体验。一个成熟的数据库架构并非一蹴而就,而是随着用户量的增长逐步完善的。本文主要探讨...

    浅谈分布式数据库架构.pdf

    设计分布式数据库时,需要考虑如何有效地进行数据分片、副本控制、负载均衡、异步复制、事务管理等关键问题。 在实际应用中,分布式数据库系统如Apache Cassandra、Google Spanner、Amazon DynamoDB等,已逐渐成为...

    浅谈SQL Server数据库访问.pdf

    "浅谈SQL Server数据库访问" 本文主要介绍了Microsoft SQL Server数据库的基本概念和访问方法,讨论了三种常用的数据库访问接口DAO、ODBC和ADO,并提供了一些示例程序来访问SQL Server数据库。此外,本文还介绍了...

    浅谈分布式数据库系统架构.pdf

    3. 全事务支持:分布式数据库系统支持全事务管理,确保数据处理的一致性。系统采用全局事务管理集群来保证分布式事务的一致性,通过集群快照等新技术来解决分布式系统中数据一致性的问题。 分布式数据库系统架构...

    浅谈Oracle数据库安全策略.pdf

    2. 日志管理:Oracle数据库的重做日志(Redo Log)记录了所有的事务更改,是实现事务恢复和崩溃恢复的关键。归档日志(Archived Logs)则保存了已提交的事务,以备在需要时进行恢复。因此,保持日志的完整性和管理好...

    浅谈SpringBoot之事务处理机制

    浅谈SpringBoot之事务处理机制 SpringBoot之事务处理机制是Spring框架中的一种机制,用于管理事务。事务是指一系列的数据库操作,例如插入、更新、删除等,事务处理机制的目的就是为了确保这些操作的原子性、一致性...

    浅谈Oralce数据库的优化.doc

    本文主要探讨了12个关键的优化策略,针对Oracle数据库的SQL查询和事务处理进行了深入分析。 1. 表的顺序选择:在FROM子句中,应将记录条数最少的表放在最右边,以优化Oracle的解析过程。在多表连接查询中,基础表的...

    浅谈分布式数据库管理应用系统的开发.pdf

    此外,系统还需要处理全局事务,协调不同局部站点的数据库管理系统,以保证在整个共享平台上的操作一致性。数据并发控制机制是另一个关键点,它确保在多用户环境下数据的一致性和完整性。同时,系统还需要具备数据...

    浅谈Java技术中的数据库应用

    在Web环境中,Java可以无缝地集成到基于Servlet和JSP的Web应用框架中,如Spring框架,提供了一套完整的事务管理、数据访问和持久化策略,简化了数据库应用的开发和维护。 在Java 2及后续版本中,JDBC得到了进一步的...

    浅谈SQL Server数据库查询性能的优化.pdf

    首先,数据库系统性能的优劣可以通过多个度量标准来评估,包括SQL语句的响应时间、支持并发用户的能力以及系统每天处理的事务量等。影响数据库性能的因素主要包括以下几个方面: 1. SQL语句的设计不当。如果SQL语句...

    DB2 数据库调优浅谈

    ### DB2 数据库调优浅谈 #### 数据库调优的视角 在进行数据库调优时,不同的视角可能会带来不同的解决方案。通常来说,可以从以下几个方面考虑: - **应用优化**:针对应用程序本身的优化,比如查询逻辑、事务...

    浅谈分布式数据库的数据存储.pdf

    透明性体现在用户对数据存储位置的无知,数据的存储、查询和事务处理对用户来说是不可见的,而灵活性则表现在分布式数据库能够支持不同类型的存储需求和应用场景。 分布式数据库系统克服了传统集中式数据库的很多...

    浅谈Oracle数据库系统性能优化策略.pdf

    Oracle数据库系统性能优化是数据库管理中的重要环节,它涉及到数据库设计、硬件配置、操作系统设置、数据库参数调整以及应用程序优化等多个方面。在设计阶段进行性能优化是最经济且效果最佳的策略,因为一旦系统上线...

    浅谈Oracle数据库性能调优 (2).pdf

    【Oracle 数据库性能调优】 Oracle数据库性能调优是一个DBA(数据库管理员)的重要任务,其目的是提升数据库的运行效率,降低存储空间占用,并优化查询性能。本文将围绕Oracle数据库的性能优化方法展开讨论,主要关注...

Global site tag (gtag.js) - Google Analytics