SQL Server 以下列事务模式运行。
1. 自动提交事务
每条单独的语句都是一个事务。例如,使用DDL(数据定义语言)定义一个对象。
2. 显式事务
每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式结束。
3. 隐式事务
在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT 或 ROLLBACK 语句显式完成。
教你备份与恢复数据库
4. 批处理级事务
只能应用于多个活动结果集 (MARS),在 MARS 会话中启动的 Transact-SQL 显式或隐式事务变为批处理级事务。 当批处理完成时没有提交或回滚的批处理级事务自动由 SQL Server 进行回滚。
SQL Server中的事务处理机制
1. 原子性
如果在提交事务的过程中出现错误,整个事务将会回滚。只有当事务中的所有部分都成功执行了,才将事务写入磁盘并使变化永久化。
为了提供回滚或者撤消未提交的变化的能力,SQL Server使用一个预写事务日志(WAL),在将数据提交到实际数据页面之前,先写在事务日志上。事务回滚时,数据源可以撤消所有未提交的改变。
2. 一致性
在事务提交之前,数据页面处于有效状态。如果事务成功地完成,并且提交事务,则数据页面处于新的有效的状态。如果事务出错,终止后,数据页面返回到原先的有效状态。
当许多用户同时使用和修改同样的数据时,事务必须保持其数据的完整性和一致性。因此使用下一个特性:隔离性。
注意:事务的一致性与数据完整性(Integrity)是不同的概念。SQL Sever的事务处理机制,可以保证数据在提交后即使遇到回滚也可以回到最初的原始状态。而数据完整性是由数据库引擎保证数据是正确、有效的,防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出而造成无效操作或错误信息。
3. 隔离性
隔离性不仅仅保证多个事务不能同时修改相同数据,而且能够保证事务操作产生的变化直到变化被提交或终止时才能对另一个事务可见,并发的事务彼此之间毫无影响。这就意味着所有要求修改或读取的数据已经被锁定在事务中,直到事务完成才能释放。SQL Server通过使用锁定来实现隔离,事务中涉及的各个数据项或数据集使用锁定来防止并发访问。
4. 持久性
事务导致的数据变化的是永久的,一直保持在系统中,只是在事务完全完成并提交后才写入磁盘的。SQL Server可以通过读取事务日志来验证所有数据都被写入数据页面。