(1):事务(Transaction)是并发控制的单位,是用户定义的一个 *** 作序列。这些 *** 作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL
Server能将逻辑相关的一组 *** 作绑定在一起,以便服务器保持数据的完整性。
(2):事务通常是以BEGIN
TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有 *** 作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的 *** 作全部撤消,滚回到事务开始的状态。
(3):事务运行的三种模式:
A:自动提交事务
每条单独的语句都是一个事务。每个语句后都隐含一个COMMIT。
B:显式事务
以BEGIN
TRANSACTION显式开始,以COMMIT或ROLLBACK显式结束。
C:隐性事务
在前一个事务完成时,新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK显式结束。
(4):事务的特性(ACID特性)
A:原子性(Atomicity)
事务是数据库的逻辑工作单位,事务中包括的诸 *** 作要么全做,要么全不做。
B:一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
注:事务是恢复和并发控制的基本单位。
定义:数据库一致性(database
consistency)是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
数据库状态如何变化?每一次数据变更就会导致数据库的状态迁移。如果数据库的初始状态是c0,第一次事务t1的提交就会导致系统生成一个system
change
number(scn),这是数据库状态从c0转变成c1。执行第二个事务t2的时候数据库状态从t1变成t2,以此类推,执行第tn次事务的时候数据库状态由c(n-1)变成cn。
定义一致性主要有2个方面,一致读和一致写。
一致写:事务执行的数据变更只能基于上一个一致的状态,且只能体现在一个状态中。t(n)的变更结果只能基于c(n-1),c(n-2),
c(1)状态,且只能体现在c(n)状态中。也就是说,一个状态只能有一个事务变更数据,不允许有2个或者2个以上事务在一个状态中变更数据。至于具体一致写基于哪个状态,需要判断t(n)事务是否和t(n-1),t(n-2),t(1)有依赖关系。
一致读:事务读取数据只能从一个状态中读取,不能从2个或者2个以上状态读取。也就是t(n)只能从c(n-1),c(n-2)
c(1)中的一个状态读取数据,不能一部分数据读取自c(n-1),而另一部分数据读取自c(n-2)。
摆事实
一致写:
定义100个事务t(1)t(100)实现相同的逻辑
update
table
set
i=i+1,i的初始值是0,那么并发执行这100个事务之后i的值是多少?可能很容易想到是100。那么怎么从一致性角度去理解呢?
数据库随机调度到t(50)执行,此时数据库状态是c(0),而其它事务都和t(50)有依赖关系,根据写一致性原理,其它事务必须等到t(50)执行完毕后数据库状态变为c(1)才可以执行。因此数据库利用锁机制阻塞其它事务的执行。直到t(50)执行完毕,数据库状态从c(0)迁移到c(1)。数据库唤醒其它事务后随机调度到t(89)执行,以此类推直到所有事务调度执行完毕,数据库状态最终变为c(100)。
一致读:
还是上面的例子,假设t(1)t(100)顺序执行,在不同的时机执行select
i
from
table,我们看到i的值是什么?
1
t(1)的执行过程中。数据库状态尚未迁移,读到的i=0
2
t(1)执行完毕,t(2)的执行过程中,数据库状态迁移至c(1),读到的i=1
一致性(Consistent)(Consistency) 事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。某些维护一致性的责任由应用程序开发人员承担,他们必须确保应用程序已强制所有已知的完整性约束。如,当开发用于转账的应用程序时,应避免在转账过程中任意移动小数点。隔离性(Insulation)(Isolation) 由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为隔离性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。当事务可序列化时将获得最高的隔离级别。在此级别上,从一组可并行执行的事务获得的结果与通过连续运行每个事务所获得的结果相同。由于高度隔离会限制可并行执行的事务数,所以一些应用程序降低隔离级别以换取更大的吞吐量。持久性(Duration)(Durability) 事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。
以上就是关于什么是数据库事务全部的内容,包括:什么是数据库事务、如何理解数据库事务一致性、数据库事务一致性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)