Posts Tagged ‘isolation level’
1.事务(Transaction):
事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为 ACID
(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务。
原子性(Atomicty)
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性(Consistency)
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事
务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链
表)都必须是正确的。
隔离性(Isolation)
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状
态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看
中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使
数据结束时的状态与原始事务执行的状态相同。
持久性(Durability)
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
2.启动事务
在 Microsoft® SQL Server™ 中,可以按显式、自动提交或隐性模式启动事务。
显式事务
通过发出 BEGIN TRANSACTION 语句显式启动事务。
自动提交事务
这是 SQL Server 的默认模式。每个单独的 Transact-SQL 语句都在其完成后提交。不必指定任
何语句控制事务。
隐性事务
通过 API 函数或 Transact-SQL SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设
置为打开。下一个语句自动启动一个新事务。当该事务完成时,再下一个 Transact-SQL 语句
又将启动一个新事务。
3.结束事务
可以使用 COMMIT 或 ROLLBACK 语句结束事务。
COMMIT
如果事务成功,则提交。COMMIT 语句保证事务的所有修改在数据库中都永久有效。COMMIT
语句还释放资源,如事务使用的锁。
ROLLBACK
如果事务中出现错误,或者用户决定取消事务,可回滚该事务。ROLLBACK 语句通过将数据返
回到它在事务开始时所处的状态,来恢复在该事务中所作的所有修改。ROLLBACK 还会释放由
事务占用的资源。
4.事务处理过程中的错误
如果服务器错误使事务无法成功完成,SQL Server 将自动回滚该事务,并释放该事务占用的所有
资源。如果客户端与 SQL Server 的网络连接中断了,那么当网络告知 SQL Server 该中断时,将
回滚该连接的所有未完成事务。如果客户端应用程序失败或客户计算机崩溃或重启,也会中断该连
接,而且当网络告知 SQL Server 该中断时,也会回滚所有未完成的连接。如果客户从该应用程序
注销,所有未完成的事务也会被回滚。
如果批处理中出现运行时语句错误(如违反约束),那么 SQL Server 中默认的行为将是只回滚产
生该错误的语句。可以使用 SET XACT_ABORT 语句改变该行为。在 SET XACT_ABORT ON 语句
执行之后,任何运行时语句错误都将导致当前事务自动回滚。编译错误(如语法错误)
不受 SET XACT_ABORT [...]