事务的特性(ACID),详细说明各个特性的含义?

事务的特性(ACID),详细说明各个特性的含义?

原子性:一个事务不可再分割,要么都执行要么都不执行。

一致性:一个事务执行会使数据从一个一致的状态切换到另一个一致的状态。

隔离性:一个事物的执行不会受其他事务的干扰。

持久性:一个事务一旦提交,则会永久性的改变。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库系统中事务的 数据库系统中事务ACID原则 原则 事务的原⼦、⼀致、独⽴及持久 事务的原⼦是指⼀个事务要么全部执⾏,要么不执⾏.也就是说⼀个事务不可能只执⾏了⼀半就停⽌了.⽐如你从取款机取钱,这个事务可以分 成两个步骤:1划卡,2出钱.不可能划了卡,⽽钱却没出来.这两步必须同时完成.要么就不完成. 事务的⼀致是指事务的运⾏并不改变数据库中数据的⼀致.例如,完整约束了a+b=10,⼀个事务改变了a,那么b也应该随之改变. 事务的独⽴是指两个以上的事务不会出现交错执⾏的状态.因为这样可能会导致数据不⼀致. 事务的持久是指事务运⾏成功以后,就系统的更新是永久的.不会⽆缘⽆故的回滚. 当事务处理系统创建事务时,将确保事务有某些特性。组件的开发者们假设事务特性应该是⼀些不需要他们亲⾃管理的特性。这些特性称 为ACID特性ACID就是:原⼦(Atomicity )、⼀致( Consistency )、隔离或独⽴( Isolation)和持久(Durabilily)。 1. 原⼦ 原⼦⽤于标识事务是否完全地完成,⼀个事务的任何更新要在系统上完全完成,如果由于某种原因出错,事务不能完成它的全部任 务,系统将返回到事务开始前的状态。 让我们再看⼀下银⾏转帐的例⼦。如果在转帐的过程中出现错误,整个事务将会回滚。只有当事务中的所有部分都成功执⾏了,才将事务写 ⼊磁盘并使变化永久化。 为了提供回滚或者撤消未提交的变化的能⼒,许多数据源采⽤⽇志机制。例如,SQL Server使⽤⼀个预写事务⽇志,在将数据应⽤于(或提 交到)实际数据页⾯前,先写在事务⽇志上。但是,其他⼀些数据源不是关系型数据库管理系统 (RDBMS),它们管理未提交事务的⽅式完全 不同。只要事务回滚时,数据源可以撤消所有未提交的改变,那么这种技术应该可⽤于管理事务。 2. ⼀致 事务在系统完整中实施⼀致,这通过保证系统的任何事务最后都处于有效状态来实现。如果事务成功地完成,那么系统中所有变化将正 确地应⽤,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将⾃动地回滚,系统返回到原始状态。因为事务开 始时系统处于⼀致状态,所以现在系统仍然处于⼀致状态。 再让我们回头看⼀下银⾏转帐的例⼦,在帐户转换和资⾦转移前,帐户处于有效状态。如果事务成功地完成,并且提交事务,则帐户处于新 的有效的状态。如果事务出错,终⽌后,帐户返回到原先的有效状态。 记住,事务不负责实施数据完整,⽽仅仅负责在事务提交或终⽌以后确保数据返回到⼀致状态。理解数据完整规则并写代码实现完整 的重任通常落在开发者肩上,他们根据业务要求进⾏设计。 当许多⽤户同时使⽤和修改同样的数据时,事务必须保持其数据的完整和⼀致。因此我们进⼀步研究A C I D特性中的下⼀个特性:隔离 。 3. 隔离 在隔离状态执⾏事务,使它们好像是系统在给定时间内执⾏的唯⼀操作。如果有两个事务,运⾏在相同的时间内,执⾏相同的功能,事务的 隔离将确保每⼀事务在系统中认为只有该事务在使⽤系统。 这种属有时称为串⾏化,为了防⽌事务操作间的混淆,必须串⾏化或序列化请求,使得在同⼀时间仅有⼀个请求⽤于同⼀数据。 重要的是,在隔离状态执⾏事务,系统的状态有可能是不⼀致的,在结束事务前,应确保系统处于⼀致状态。但是在每个单独的事务中,系 统的状态可能会发⽣变化。如果事务不是在隔离状态运⾏,它就可能从系统中访问数据,⽽系统可能处于不⼀致状态。通过提供事 务隔离,可以阻⽌这类事件的发⽣。 在银⾏的⽰例中,这意味着在这个系统内,其他过程和事务在我们的事务完成前看不到我们的事务引起的任何变化,这对于终⽌的情况⾮常 重要。如果有另⼀个过程根据帐户余额进⾏相应处理,⽽它在我们的事务完成前就能看到它造成的变化,那么这个过程的决策可能 建⽴在错误的数据之上,因为我们的事务可能终⽌。这就是说明了为什么事务产⽣的变化,直到事务完成,才对系统的其他部分可见。 隔离不仅仅保证多个事务不能同时修改相同数据,⽽且能够保证事务操作产⽣的变化直到变化被提交或终⽌时才能对另⼀个事务可见,并 发的事务彼此之 间毫⽆影 响。这就意味着所有要求修改或读取的数据已经被锁定在事务中,直到事务完成才能释放。⼤多数数据库,例如 SQL Server以及其他的RDBMS,通过使⽤锁定来实现隔离,事务中涉及的各个数据项或数据集使⽤锁定来防⽌并发访问。 4. 持久 持久意味着⼀旦事务执⾏成功,在系统中产⽣的所有变化将是永久的。应该存在⼀些检查点防⽌在系统失败时丢失信息。甚⾄硬件本⾝失 败,系统的状态仍能通过在⽇志中记录事务完成的任务进⾏重建。持久的概念允许开发者认为不管系统以后发⽣了什么变化,完 成的事务是系统永久的部分。 在银

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值