
一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
事务通常由高级数据库 *** 纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体 *** 作组成。
特性
事务是恢复和并发控制的基本单位。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的 *** 作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
1、原子性。一个事务是一个不可分割的工作单位,事务中包括的诸 *** 作要么都做,要么都不做。
2、一致性。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
3、隔离性。一个事务的执行不能被其他事务干扰。即一个事务内部的 *** 作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
4、持久性。指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他 *** 作或故障不应该对其有任何影响。
扩展资料
事务类型:
1、手动事务。手动事务允许显式处理若干过程,这些过程包括:开始事务、控制事务边界内的每个连接和资源登记、确定事务结果(提交或中止)以及结束事务。
2、自动事务。NET 页、XML Web services方法或 NET Framework 类一旦被标记为参与事务,它们将自动在事务范围内执行。可以通过在页、XML Web services 方法或类中设置一个事务属性值来控制对象的事务行为。
参考资料来源:百度百科——事务
事务的四个特性是原子性、一致性、隔离性、持久性。
1、原子性(Atomicity)
*** 作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是20000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是20000,这就是事务的一致性。
2、一致性(Consistency)
事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
3、隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如 *** 作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的 *** 作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
4、持久性(Durability)
当事务正确完成后,它对于数据的改变是永久性的。
释义:指访问并可能更新数据库中各种数据项的一个程序执行单元。
事务特征:
1、原子性:一个事务是一个不可分割的工作单位,事务中包括的 *** 作要么都做,要么都不做。
2、一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态。
3、隔离性:一个事务的执行不能被其他事务干扰。
4、持久性:指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
扩展资料
事务的处理过程:
1、事务处理中的每个语句都是完成整个任务的一部分工作,所有的语句组织在一起能够完成某一特定的任务。
2、在对事务处理中的语句进行处理时,是按照“事务处理中的所有语句被作为一个原子工作单位,所有的语句既可成功地被执行,也可以没有任何一个语句被执行”来处理的。
3、即使在事务处理中应用程序异常退出,或者是硬件出现故障等各种意外情况下,也是如此。在任何意外情况下,都不会出现“部分事务处理中的语句被执行完”的情况。
参考资料来源:百度百科-事务
事务通常由高级数据库 *** 纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begintransaction和endtransaction语句(或函数调用)来界定
特性:原子性,一致性,隔离性,持续性。
原子性:事物是数据库的逻辑工作单位,事物中包括的 *** 作要么都做,要么都不做。
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事务的执行不能被其它事物干扰。即一个事物内部的 *** 作及使用的数据对其它并发事物是隔离的,并发执行的各个事物之间不能互相烦扰。
持续性:也称永久性,只一个事物一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其它 *** 作或故障不应该对其执行结果有任何影响。
这个问题的有趣之处,不在于问题本身(“原子性、一致性的实现机制是什么”),而在于回答者的分歧反映出来的另外一个问题:原子性和一致性之间的关系是什么?
我特别关注了@我练功发自真心
的答案,他正确地指出了,为了保证事务 *** 作的原子性,必须实现基于日志的REDO/UNDO机制。但这个答案仍然是不完整的,因为原子性并不能够完全保证一致性。
按照我个人的理解,在事务处理的ACID属性中,一致性是最基本的属性,其它的三个属性都为了保证一致性而存在的。
首先回顾一下一致性的定义。所谓一致性,指的是数据处于一种有意义的状态,这种状态是语义上的而不是语法上的。最常见的例子是转帐。例如从帐户A转一笔钱到帐户B上,如果帐户A上的钱减少了,而帐户B上的钱却没有增加,那么我们认为此时数据处于不一致的状态。
在
数据库实现的场景中,一致性可以分为数据库外部的一致性和数据库内部的一致性。前者由外部应用的编码来保证,即某个应用在执行转帐的数据库 *** 作时,必须在
同一个事务内部调用对帐户A和帐户B的 *** 作。如果在这个层次出现错误,这不是数据库本身能够解决的,也不属于我们需要讨论的范围。后者由数据库来保证,即
在同一个事务内部的一组 *** 作必须全部执行成功(或者全部失败)。这就是事务处理的原子性。
为了实现原子性,需要通过日志:将所有对
数据的更新 *** 作都写入日志,如果一个事务中的一部分 *** 作已经成功,但以后的 *** 作,由于断电/系统崩溃/其它的软硬件错误而无法继续,则通过回溯日志,将已
经执行成功的 *** 作撤销,从而达到“全部 *** 作失败”的目的。最常见的场景是,数据库系统崩溃后重启,此时数据库处于不一致的状态,必须先执行一个crash
recovery的过程:读取日志进行REDO(重演将所有已经执行成功但尚未写入到磁盘的 *** 作,保证持久性),再对所有到崩溃时尚未成功提交的事务进行
UNDO(撤销所有执行了一部分但尚未提交的 *** 作,保证原子性)。crash
recovery结束后,数据库恢复到一致性状态,可以继续被使用。
日志的管理和重演是数据库实现中最复杂的部分之一。如果涉及到并行处理和分布式系统(日志的复制和重演是数据库高可用性的基础),会比上述场景还要复杂得多。
但是,原子性并不能完全保证一致性。在多个事务并行进行的情况下,即使保证了每一个事务的原子性,仍然可能导致数据不一致的结果。例如,事务1需要将100元转入帐号A:先读取帐号A的值,然后在这个值上加上100。但是,在这两个 *** 作之间,另一个事务2修改了帐号A的值,为它增加了100元。那么最后的结果应该是A增加了200元。但事实上,
事务1最终完成后,帐号A只增加了100元,因为事务2的修改结果被事务1覆盖掉了。
为了保证并发情况下的一致性,引入了隔离性,即保证每一个事务能够看到的数据总是一致的,就好象其它并发事务并不存在一样。用术语来说,就是多个事务并发执行后的状态,和它们串行执行后的状态是等价的。怎样实现隔离性,已经有很多人回答过了,原则上无非是两种类型的锁:
一
种是悲观锁,即当前事务将所有涉及 *** 作的对象加锁, *** 作完成后释放给其它对象使用。为了尽可能提高性能,发明了各种粒度(数据库级/表级/行级……)/各
种性质(共享锁/排他锁/共享意向锁/排他意向锁/共享排他意向锁……)的锁。为了解决死锁问题,又发明了两阶段锁协议/死锁检测等一系列的技术。
一种是乐观锁,即不同的事务可以同时看到同一对象(一般是数据行)的不同历史版本。如果有两个事务同时修改了同一数据行,那么在较晚的事务提交时进行冲突
检测。实现也有两种,一种是通过日志UNDO的方式来获取数据行的历史版本,一种是简单地在内存中保存同一数据行的多个历史版本,通过时间戳来区分。
锁也是数据库实现中最复杂的部分之一。同样,如果涉及到分布式系统(分布式锁和两阶段提交是分布式事务的基础),会比上述场景还要复杂得多。
@
我练功发自真心
提到,其他回答者说的其实是 *** 作系统对atomic的理解,即并发控制。我不能完全同意这一点。数据库有自己的并发控制和锁问题,虽然在原理上和 *** 作系统
中的概念非常类似,但是并不是同一个层次上的东西。数据库中的锁,在粒度/类型/实现方式上和 *** 作系统中的锁都完全不同。 *** 作系统中的锁,在数据库实现中
称为latch(一般译为闩)。其他回答者回答的其实是“在并行事务处理的情况下怎样保证数据的一致性”。
最后回到原来的问题(“原子性、一致性的实现机制是什么”)。我手头有本Database
System
Concepts(4ed,有点老了),在第15章的开头简明地介绍了ACID的概念及其关系。如果你想从概念上了解其实现,把这本书的相关章节读完应该能大概明白。如果你想从实践上了解其实现,可以找innodb这样的开源引擎的源代码来读。不过,即使是一个非常粗糙的开源实现(不考虑太复杂的并行处理,不考虑分布式系统,不考虑针对 *** 作系统和硬件的优化之类),要基本搞明白恐怕也不是一两年的事。
事务的四个特性是原子性、一致性、隔离性和持久性,简称ACID。
1、原子性:事务必须是一个不可分割的 *** 作序列单元,要么全部成功,要么全部失败。
2、一致性:事务执行前后,数据库都必须处于一致性状态,不能破坏数据的完整性和一致性。
3、隔离性:事务之间是隔离开的,一个事务看不到另一个事务正在 *** 作的数据。
4、持久性:一旦事务提交成功,事务中所有的数据 *** 作都必须被持久化到数据库中,即使数据库崩溃也能通过某种机制将数据恢复到提交后的状态。
ACID性质
ACID property
定义:ACID指数据库事务正确执行的四个基本要素的缩写,包含原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。一个支持事务的数据库系统,必须要具有这四种特性,否则在事务执行过程中无法保证数据的正确性,处理过程极可能达不到正确要求。
学科:计算机科学技术_数据库_数据库管理系统及其实现
技术
相关名词:数据库 数据库管理系统 事务
延伸阅读
从数据库用户的观点看,数据库中某些特定 *** 作的集合需要被认为是一个独立单元。例如,顾客认为从支票账户到储蓄账户的资金转账是一个 *** 作单元,尽管在数据库系统中这是由对支票账户资金余额的修改、对储蓄账户资金余额的修改以及对本次交易的登记等几个 *** 作组成的。显然,必须要求这些 *** 作要么全都发生,要么由于出错而全不发生。保证这一点非常重要。无论从系统的观点还是从用户的观点,都不愿意看到资金从支票账户支出而未转入储蓄账户的情况发生。
由上述问题,可以引入数据库的“事务”概念。事务是构成单一逻辑工作单元的 *** 作集合。不论有无故障,数据库系统必须保证事务的正确执行,即该事务的整个 *** 作集合完全被执行,或属于该事务的 *** 作一个也不执行。此外,数据库系统必须以一种能避免引入不一致性的方式来管理事务的并发执行。例如,假设系统中有一个资金转账事务,将一笔资金从支票账户转到储蓄账户中,假设还有一个事务是计算顾客总金额,它和上述资金转账的事务在系统中并发地执行。如果计算顾客总金额的事务在资金转账事务从支票账户支出金额之前查看支票账户余额,而在资金存入储蓄账户之后查看储蓄账户余额,并对它们进行求和,该事务就会得到不正确的结果,因为同一笔资金被重复计算了两次。所以,为了保证事务的正确执行,维护数据库的完整性,要求数据库系统维护以下事务特性:
原子性:事务的所有 *** 作在数据库中要么全部正确反映出来,要么全部不反映。
一致性:事务的隔离执行(即没有并发执行的其他事务),保持数据库的一致性。
隔离性:尽管多个事务可以并发执行,但系统必须保证,对任一对事务A和B,在A看来,B或者在A开始之前已经停止执行,或者在A完成之后开始执行。这样,每个事务都感觉不到系统中有其他事务在并发地执行。
持久性:一个事务成功完成后,它对数据库的改变必须是永久的,即使系统可能出现故障。
以上特性统称为ACID特性,他们全部是由数据库管理系统来维护的。
成功完成执行的事务称为已提交事务。已提交事务使数据库进入一个新的一致状态。未能成功完成的事务称为中止事务,中止事务必须对数据库的状态不造成影响。即中止事务对数据库所做的任何改变必须撤销。一旦中止事务造成的变更被撤销,就说明事务已回滚。如此,才能保证数据库当中的数据在经过 *** 作或
以上就是关于什么是事务事务有哪些特征全部的内容,包括:什么是事务事务有哪些特征、什么叫做事务以及事务的四个特性、简述事务的特性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)