详见:
http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp45
[size=12px;]事务的四个属性[/size]:原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。
原子性(Atomic)
最重要的原则,也是最容易理解的原则。被事务管理的所有方法,要么一起被提交,要么一起回滚。
一致性(Consistency)
事务在系统完整性中实施一致性,如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于新有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。
隔离性(Isolation)
在隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。重要的是,在隔离状态执行事务,系统的状态有可能是不一致的,在结束事务前,应确保系统处于一致状态。但是在每个单独的事务中,系统的状态可能会发生变化。如果事务不是在隔离状态运行,它就可能从系统中访问数据,而系统可能处于不一致状态。通过提供事务隔离,可以阻止这类事件的发生。
持久性(Durability)
持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。应该存在一些检查点防止在系统失败时丢失信息。甚至硬件本身失败,系统的状态仍能通过在日志中记录事务完成的任务进行重建。
数据库锁概念:
在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。
从程序员的角度看,锁分为以下两种类型:
1.乐观锁(Optimistic Lock)
乐观锁假定在处理数据时,不需要在应用程序的代码中做任何事情就可以直接在记录上加锁、即完全依靠数据库来管理锁的工作。一般情况下,当执行事务处理时SQL Server会自动对事务处理范围内更新到的表做锁定。
2.悲观锁(Pessimistic Lock)
悲观锁对数据库系统的自动管理不感冒,需要程序员直接管理数据或对象上的加锁处理,并负责获取、共享和放弃正在使用的数据上的任何锁。
一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。
数据库并发操作存在的异常情况:
1. 更新丢失(Lost update):两个事务都同时更新一行数据但是第二个事务却中途失败退出导致对数据两个修改都失效了这是系统没有执行任何锁操作因此并发事务并没有被隔离开来(可以不进行考虑,学习优先级地)
[size=12px;]3. [/size]不可重复读取(Non-repeatable Reads):是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果 只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。
[size=12px;]5. [/size]幻读(Phantom Reads):也称为幻像(幻影)。是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。 如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。
[size=12px;][size=12px;]1.[/size][size=12px;]未授权读取(Read Uncommitted):也称[size=12px;]未提交读[/size][size=12px;],[/size][/size][size=12px;][size=12px;]会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )[/size][/size][size=12px;]。([/size][size=12px;][size=12px;]在读数据时不会检查或使用任何锁。因此,在这种隔离级别中可能读取到没有提交的数据。[/size][/size][size=12px;])允许脏读取但不允许更新丢失,如果一个事务已经开始写数据则另外一个数据则不允许同时进行写操作但允许其他事务[size=12px;]读此行数据[/size]。该隔离级别可以通过“排他写锁”实现。[/size][size=12px;]事务隔离的最低级别[/size][size=12px;],仅可保证不读取物理损坏的数据。它允许读取已经被其它用户修改但尚未提交确定的数据。[/size][/size]
[size=12px;]3. [/size]可重复读取(Repeatable Read):禁止不可重复读取和脏读取,会出幻读(锁定所读取的所有行)。但是有时可能出现幻影数据,这可以通过“共享读锁”和“排他写锁”实现,读取数据事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。在此隔离级下,用SELECT 命令读取的数据在整个命令执行过程中不会被更改。此选项会影响系统的效能,非必要情况最好不用此隔离级。
分享到:
相关推荐
数据库事务和隔离级别
介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响
事务隔离级别 课程目标 了解 —— 事务隔离级别的概念; 理解 —— 事务隔离的四种级别; 掌握 —— 事务隔离级别的设置; 事务隔离级别 事务隔离:每一个事务都有一个所谓的隔离级,它定义了用户彼此之间隔离和交互...
Spring 框架提供了一套完善的事务管理机制,其中包含了多种事务传播属性和事务隔离级别。这些特性使得在处理数据库操作时,能够更好地控制事务的边界和行为,从而确保数据的一致性和完整性。 首先,我们来看一下...
持久性(Durability):持久性指对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。 2. 隔离级别 Serializable(串行化):可避免脏读、不可重复读、幻读的发生。 Rep
查询:默认事务隔离级别 mysql> select @@tx_isolation;当前会话的默认事务隔离级别 mysql> select @@session.tx_isolation;当前会话的默认事务隔离级别 mysql> select @@global.tx_isolation;全局的事务隔离级别
数据库事务与隔离级别 数据库事务是指一系列操作的集合,作为一个单元执行,以维护数据库的一致性和完整性。事务必须具备四大特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性...
数据库事务是确保数据库操作一致性的重要机制,它定义了一组数据库操作的边界,这些操作要么全部执行,要么全部不执行。事务通常包含四个基本属性,即原子性(Atomicity)、一致性(Consistency)、隔离性...
### 数据库事务隔离级别详解 #### 一、引言 在多用户共享的数据库系统中,为了保证数据的一致性和准确性,必须对并发事务进行控制。数据库事务隔离级别是用来管理多个事务之间相互影响的程度,主要解决的问题包括脏...
### 数据库事务总结 #### 一、事务的基本概念与特性 **事务**是数据库系统中的一个逻辑工作单元,它由一系列的操作组成,这些操作要么都完成,要么都不完成,以此来保证数据的一致性和完整性。 #### 二、事务的...
数据库事务的隔离级别是数据库管理系统在并发环境中保证数据一致性、避免脏读、不可重复读和幻读等问题的关键机制。在数据库领域,ACID(原子性、一致性、隔离性、持久性)理论是事务处理的基本原则。 1. **原子性...
事务隔离级别是指数据库事务的隔离级别,用于控制事务之间的隔离度。Java 中有五种事务隔离级别,分别是: 1. ISOLATION_DEFAULT:这是 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别...
本资料主要探讨的是Spring支持的数据库事务传播属性和事务隔离级别。 一、事务传播属性 1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果没有事务,则创建一个新的事务。这是最常见的事务定义,适用于...
MySQL数据库的事务隔离级别是数据库管理系统中用于控制事务处理中并发操作的重要机制。在多用户同时访问数据库的情况下,事务隔离级别能够确保数据的一致性和完整性,避免并发操作带来的各种问题,如脏读、不可重复...
数据库系统提供了不同的隔离级别来控制这种影响: - **未提交读(Read Uncommitted)**:最低的隔离级别,允许读取未提交的数据,可能导致脏读、不可重复读和幻读。 - **提交读(Read Committed)**:在提交后才...
事务隔离级别是数据库系统用来解决并发控制问题的关键策略,它定义了事务之间的隔离程度,以防止数据不一致的情况发生。以下是对MySQL数据库事务隔离级别的详细解释。 1. **丢失更新**:在并发环境下,一个事务的...
总的来说,C#数据库事务原理及实践涉及了如何在.NET框架下使用C#操纵数据库事务,包括事务的开始、提交、回滚以及事务的ACID属性在实际操作中的应用。通过理解这些知识点,开发者能更好地保证数据库操作的安全性和...
Spring声明式数据库事务的使用,特别是隔离级别,是确保数据一致性与并发控制的关键技术。在高并发的互联网环境中,如商品库存管理,多个线程同时处理数据可能导致数据不一致,出现丢失更新问题。为此,数据库引入了...