事务四大特性详解

原创 2016年04月08日 17:34:49

数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做要么全不做,是一个不可分割的工作单位。

事务是指对系统进行的一组操作,为了保证系统的完整性,事务需要具有数据库事务的四大特性(简称ACID)是: 

(1) 原子性(Atomicity)

     一个事务包含多个操作,这些操作要么全部执行,要么全都不执行。实现事务的原子性,要支持回滚操作,在某个操作失败后,回滚到事务执行之前的状态。
     回滚实际上是一个比较高层抽象的概念,大多数DB在实现事务时,是在事务操作的数据快照上进行的(比如,MVCC),并不修改实际的数据,如果有错并不会提交,所以很自然的支持回滚。
     而在其他支持简单事务的系统中,不会在快照上更新,而直接操作实际数据。可以先预演一边所有要执行的操作,如果失败则这些操作不会被执行,通过这种方式很简单的实现了原子性。

(2)一致性(Consistency)  

     一致性是指事务使得系统从一个一致的状态转换到另一个一致状态。事务的一致性决定了一个系统设计和实现的复杂度。事务可以不同程度的一致性:
     强一致性:读操作可以立即读到提交的更新操作。
     弱一致性:提交的更新操作,不一定立即会被读操作读到,此种情况会存在一个不一致窗口,指的是读操作可以读到最新值的一段时间。
     最终一致性:是弱一致性的特例。事务更新一份数据,最终一致性保证在没有其他事务更新同样的值的话,最终所有的事务都会读到之前事务更新的最新值。如果没有错误发生,不一致窗口的大小依赖于:通信延迟,系统负载等。
     其他一致性变体还有:
     单调一致性:如果一个进程已经读到一个值,那么后续不会读到更早的值。
     会话一致性:保证客户端和服务器交互的会话过程中,读操作可以读到更新操作后的最新值。

(3)分离性(亦称独立性Isolation)

     并发事务之间互相影响的程度,比如一个事务会不会读取到另一个未提交的事务修改的数据。在事务并发操作时,可能出现的问题有:
     脏读:事务A修改了一个数据,但未提交,事务B读到了事务A未提交的更新结果,如果事务A提交失败,事务B读到的就是脏数据。
     不可重复读:在同一个事务中,对于同一份数据读取到的结果不一致。比如,事务B在事务A提交前读到的结果,和提交后读到的结果可能不同。不可重复读出现的原因就是事务并发修改记录,要避免这种情况,最简单的方法就是对要修改的记录加锁,这回导致锁竞争加剧,影响性能。另一种方法是通过MVCC可以在无锁的情况下,避免不可重复读。
     幻读:在同一个事务中,同一个查询多次返回的结果不一致。事务A新增了一条记录,事务B在事务A提交前后各执行了一次查询操作,发现后一次比前一次多了一条记录。幻读是由于并发事务增加记录导致的,这个不能像不可重复读通过记录加锁解决,因为对于新增的记录根本无法加锁。需要将事务串行化,才能避免幻读。
     事务的隔离级别从低到高有:
     Read Uncommitted:最低的隔离级别,什么都不需要做,一个事务可以读到另一个事务未提交的结果。所有的并发事务问题都会发生。
     Read Committed:只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题
     Repeated Read:在一个事务中,对于同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。可以解决脏读、不可重复读
     Serialization:事务串行化执行,隔离级别最高,牺牲了系统的并发性。可以解决并发事务的所有问题
     通常,在工程实践中,为了性能的考虑会对隔离性进行折中。

(4)持久性(Durability)

持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,即对已提交事务的更新能恢复。持久性通过数据库备份和恢复来保证。

事务提交后,对系统的影响是永久的。



版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Sun_P0/article/details/51098325

事务的概念和四大特性以及事务的隔离级别

事务事务:是用户定义的一个操作序列。这些操作,要么都做,要么都不做。是一个不可分割的工作单位。通过事务,数据库可以把逻辑相关的一组操作绑定在一起,以便数据库服务器保持数据的完整性。事务通常是以BEGI...
  • zwq1232113457
  • zwq1232113457
  • 2016-12-03 10:43:56
  • 2527

我对事务四大特性的认识和理解

一. 首先,我们需要知道事务的四大特性有哪些?            1. 原子性(Atomicity)                               原子性是指事务包含的所有操作要...
  • qq_36074042
  • qq_36074042
  • 2017-01-16 14:12:59
  • 1356

数据库事务四大特性

数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做要么全不做,是一个不可分割的工作单位。 数据库事务的四大特性(简称ACID)是: (1) 原子性(Atomicity) ...
  • wolenski
  • wolenski
  • 2012-09-14 20:16:27
  • 36699

事务的四大特性(ACID)

如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的...
  • summer_sy
  • summer_sy
  • 2017-04-24 09:20:34
  • 72

数据库事务的四大特性

事务(transaction)是由一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单位。数据库事务的四个基本性质(ACID)1. 原子性(Atomicity) 事务...
  • baidu_34036884
  • baidu_34036884
  • 2018-03-01 13:39:13
  • 54

MySql--数据库事务四大特性以及隔离级别

事务的 四大特性(ACID):原子性、一致性、隔离性、持久性。 ⑴ 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,换言之,事务的操作如果成功就必...
  • Gol_s
  • Gol_s
  • 2017-06-08 14:32:37
  • 583

事务的四大特性及理解

一. 首先,我们需要知道事务的四大特性有哪些?           1. 原子性(Atomicity)                              原子性是指事务包含的所有操作要么全部成...
  • CSDN_JinPeng
  • CSDN_JinPeng
  • 2018-04-13 19:51:19
  • 224

事务是什么,以及事务四个特性

一.什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 ...
  • xiaoyu714543065
  • xiaoyu714543065
  • 2012-11-22 10:57:55
  • 76250

数据库事务解析及事务四个特性

    1.数据并发的问题      一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库。数据库中的相同数据可能同时被多个事务访问,如果没有采取必要的隔离措施,就会导致各种并...
  • lauray_
  • lauray_
  • 2016-01-20 11:27:32
  • 2044

什么是事务,事务的四个特性是什么

一.什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有...
  • jhonz
  • jhonz
  • 2016-10-11 10:12:09
  • 6031
收藏助手
不良信息举报
您举报文章:事务四大特性详解
举报原因:
原因补充:

(最多只允许输入30个字)