事务定义:
事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除。
事务三种运行模式:自动提交事务每条单独的语句都是一个事务。显式事务每个事务均以BEGIN
TRANSACTION语句显式开始,以COMMIT或ROLLBACK语句显式结束。隐性事务在前一个事务完成时新事务隐式启动,但每个事务仍以COMMIT或ROLLBACK语句显式完成。
事务操作的语法:
BEGIN TRANSACTION
BEGIN DISTRIBUTED TRANSACTION
COMMIT TRANSACTION
COMMIT WORK
ROLLBACK WORK
SAVE TRANSACTION
BEGIN TRANSACTION
BEGIN
TRANSACTION标记一个显式本地事务的起始点。BEGIN
TRANSACTION将@@TRANCOUNT加1。
BEGIN
TRANSACTION代表一点,由连接引用的数据在该点是逻辑和物理上都一致的。如果遇上错误,在BEGIN
TRANSACTION之后的所有数据改动都能进行回滚,以将数据返回到已知的一致状态。每个事务继续执行直到它无误地完成并且用COMMIT
TRANSACTION对数据库作永久的改动,或者遇上错误并且用ROLLBACK
TRANSACTION语句擦除所有改动
语法
BEGIN TRAN [ SACTION ] [ transaction_name |
@tran_name_variable [ WITH MARK['description' ] ] ]
例子:BEGIN TRAN T1
UPDATE table1 ...--nest transaction M2
BEGIN TRAN M2 WITH MARK
UPDATE table2 ...
SELECT * from table1
COMMIT TRAN M2
UPDATE table3 ...
COMMIT TRAN T1
BEGIN DISTRIBUTED
TRANSACTION指定一个由Microsoft分布式事务处理协调器(MS
DTC)管理的Transact-SQL分布式事务的起始。
语法BEGIN DISTRIBUTED TRAN [ SACTION ][ transaction_name |
@tran_name_variable ]
参数transaction_name是用户定义的事务名,用于跟踪MS
DTC实用工具中的分布式事务。transaction_name必须符合标识符规则,但是仅使用头32个字符
@tran_name_variable是用户定义的一个变量名,它含有一个事务名,该事务名用于跟踪MS
DTC实用工具中的分布式事务。必须用char、varchar、nchar或nvarchar数据类型声明该变量。
注释执行BEGIN
DISTRIBUTED
TRANSACTION语句的服务器是事务创建人,并且控制事务的完成当连接发出后续COMMIT
TRANSACTION或ROLLBACK
TRANSACTION语句时,主控服务器请求MS
DTC在所涉及的服务器间管理分布式事务的完成。有两个方法可将远程SQL服务器登记在一个分布式事务中:
分布式事务中已登记的连接执行一个远程存储过程调用,该调用引用一个远程服务器。分布式事务中已登记的连接执行一个分布式查询,该查询引用一个远程服务器。
示例本例在本地和远程数据库上更新作者的姓。本地和远程数据库将同时提交或同时回滚本事务。
说明当前的SQL
Server上必须安装MS
DTC.
USE pubs
GO
BEGIN DISTRIBUTED TRANSACTION
UPDATE authors
SET au_lname = 'McDonald' WHERE au_id = '409-56-7008'
EXECUTElink_Server_T.pubs.dbo.changeauth_lname
'409-56-7008','McDonald'
COMMIT TRAN
GO
Note:如果需要连接远程DB,如果是linkServer方式连接的话,一定要修该linkServer