首页 理论教育SQLServer数据库事务概念详解

SQLServer数据库事务概念详解

【摘要】:如果事务出错,终止后,账户返回到原先的有效状态。当以隐性事务模式操作时,SQL Server将在提交或回滚事务后自动启动新事务。

1.事务的概念

事务是一种机制以及一种操作序列,它包含了一组数据库操作命令,这些命令作为一个整体一起向系统提交或撤销,要么全部执行,要么全部不执行。因此事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时,事务是作为最小的控制单元使用的。这特别适用于多用户同时操作的数据通信系统,例如订票、银行保险公司以及证券交易系统等。

认识事务

2.事务的四大属性(ACID)

(1)原子性(Atomicity):事务是一个完整的操作。原子性用于标识事务是否完全地完成,一个事务的任何更新要在系统上完全完成,如果由于某种原因出错,事务不能完成它的全部任务,系统将返回到事务开始前的状态。这里以银行转账为例,如果在转账的过程中出现错误,整个事务将会回滚。只有当事务中的所有部分都成功执行了,才将事务写入磁盘并使变化永久化。

(2)一致性(Consistency):当事务完成时,数据必须处于一致状态,这主要通过保证系统的任何事务最后都处于有效状态来实现。如果事务成功地完成,那么系统中的所有变化将正确地应用,系统处于有效状态;如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。因为事务开始时系统处于一致状态,所以现在系统仍然处于一致状态。仍以银行转账为例,在账户转换和资金转移前,账户处于有效状态。如果事务成功地完成,并且提交事务,则账户处于新的有效状态。如果事务出错,终止后,账户返回到原先的有效状态。

(3)隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的。如果有两个事务运行在相同的时间内,执行相同的功能,事务的隔离性将确保在系统中对于每一事务认为只有该事务在使用系统,这种属性有时称为串行化。为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。以银行转账为例,如果在转账过程中有另一个过程根据账户余额进行相应处理,而它在事务完成前就能使人们看到它造成的变化,那么这个过程的决策可能建立在错误的数据之上,因为事务可能终止回滚。隔离性不仅保证多个事务不能同时修改相同的数据,而且能够保证事务操作产生的变化直到变化被提交或终止时才能对另一个事务可见,并发的事务彼此之间毫无影响。这就意味着所有要求修改或读取的数据已经被锁定在事务中,直到事务完成才能被释放。(www.chuimin.cn)

(4)持久性(Durability):事务完成后,它对系统的影响是持久的。在银行转账的例子中,资金的转移是持久的,一直保持在系统中。这听起来似乎简单,但这依赖于将数据写入磁盘,特别需要指出的是,数据是在事务完全完成并提交后才被写入磁盘的。

3.事务的分类

(1)显式事务:用BEGIN TRANSACTION明确指定事务的开始。

(2)隐性事务:打开隐性事务的语法格式为:SET implicit_transactions ON。当以隐性事务模式操作时,SQL Server将在提交或回滚事务后自动启动新事务。无须描述事务的开始,只需要提交或回滚事务。

(3)自动提交事务:SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。