定义
事务(Transaction)是由对数据库的若干操作组成的一个单元,这些操作要么都完成,要么都取消(如果在操作执行过程中不能完成其中任一操作),从而保证数据修改的一致性,并且在系统出错时确保数据的可恢复性机制。
属性
原子性:对数据的修改,要么都完成,要么都取消。
一致性:事务完成时,保持数据的一致性、完整性。
隔离性:并行事务之间相互隔离。
持久性:事务完成后,对数据所做的所有修改就保存到数据库中。
特点
可保证操作的一致性和可恢复性
可由用户定义,它包括一系列的操作或语句
每一条T-SQL语句都可以是一个事务
在多服务器环境中,可定义分布式事务
事务的模式
三种:显式、隐式和自动提交事务
显式事务是明确地用begin transaction 语句定义事务开始、用commit或 rollback 语句定义事务结束的事务。
事务定义有事务开始和事务结束。事务开始可分为明显定义和不明显定义;事务结束也可分为明显定义和不明显定义。
set implicit_transactions
On: 前一个事务完成时自动启动新事务开始
Off:前一条语句完成时自动启动新事务开始
隐式事务是用set implicit_transactions on 不明显地定义事务开始,用 commit 或 rollback 语句明显地定义事务结束的事务。
自动提交事务
set implicit_transactions 设置为 off 时,设置在前一条语句完成时自动启动新事务开始。如果这条语句能够成功地执行,则提交该语句,否则自动回滚该语句的操作。即每条单独的T-SQL语句都是一个事务,这就是自动事务模式。自动提交事务是SQL Server默认的事务模式。
分布式事务是跨越两个或多个数据库的事务。
事务控制
(1) 设置隐性事务开始模式:
set implicit_transactions on 启动隐性事务模式;
set implicit_transactions off 关闭隐性事务模式。
(2) 设置自动回滚模式:
set xact_abort on 当事务中任一条语句产生运行时错误,整个事务将终止并整体回滚;
set xact_abort off 当事务中语句产生运行时错误,将终止本条语句且只回滚本条语句。
事务控制语句
(1) begin transaction [事务名]
明显定义事务开始
(2) commit transaction [事务名]/ commit [ work ]
提交事务使事务对数据库的修改有效。
(3) rollback transaction [事务名] | [事务保存点]
rollback [ work ]
回滚事务使得事务对数据库的修改无效。
(4) save transaction (事务保存点):
设置保存点,用于回滚部分事务。
(5) 事务控制语句的使用方法:
begin transaction
…… -- A组语句序列
save transaction 保存点1
…… -- B组语句序列
if @@error <> 0
rollback transaction 保存点1 --回滚到保存点1
else
commit transaction
--提交A组语句,同时如果未回滚B组语句则提交B组语句 。
事务中使用的全局变量
@@rowcount上一语句影响的行数;@@trancount当前连接的活动事务数
@@error检测或使用@@error时上一条语句执行时的错误代码。
@@error=0表示执行成功;
事务控制 (1) 声明游标:declare 游标名 cursor for select语句; (2) 打开游标:open 游标名; (3) 处理数据: l 移动当前行并读取数据:fetch 游标名 [into @变量名,…] l 删除当前行数据:delete from 表或视图名 where current of 游标名 l 修改当前行数据:update from 表或视图名 set 列名=表达式,… where current of 游标名 (4) 关闭游标:close 游标名; (5) 释放游标:deallocate 游标名; |
事务控制语句的使用方法 |
begin transaction -- 事务开始 …… -- A组语句序列 save transaction 保存点1 --定义保存点 …… -- B组语句序列 if @@error <> 0 rollback transaction 保存点1 --回滚到保存点1 else commit transaction --提交A组语句,同时如果未回滚B组语句则提交B组语句。 |