大家好,又见面了,我是你们的朋友全栈君。
指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)由多个sql语句组成,必须作为一个整体执行 这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行
语法步骤: 开始事务:BEGIN TRANSACTION –开启事务 事务提交:COMMIT TRANSACTION –提交操作 事务回滚:ROLLBACK TRANSACTION –取消操作
--建表
CREATE TABLE [Person](
[PersonId] NVARCHAR(100) PRIMARY KEY , ---主键
[PersonName] NVARCHAR(100) NULL
)
/*
如果只有Begin TransAction和Commit TransAction 就算报错了,也是不会回滚的
Select * From Person
*/
Begin TransAction
Insert Into Person(PersonId,PersonName)Values('1','Name1')
Insert Into Person(PersonId,PersonName)Values('1','Name1')
Insert Into Person(PersonId,PersonName)Values('3','Name3')
Commit TransAction
/*
如果只有Begin TransAction和RollBack TransAction 就算没报错了,还是会回滚的
Select * From Person
*/
--清除数据
Delete Person
Begin TransAction
Insert Into Person(PersonId,PersonName)Values('1','Name1')
Insert Into Person(PersonId,PersonName)Values('1','Name1')
Insert Into Person(PersonId,PersonName)Values('3','Name3')
RollBack TransAction
/*
SET XACT_ABORT ON时,在事务中,若出现错误,系统即默认回滚事务,但只对非自定义错误有效
SET XACT_ABORT OFF,默认值,在事务中,回滚一个语句还是整个事务视错误的严重程序而定,
用户级错误一般不会回滚整个事务
Select * From Person
*/
SET XACT_ABORT ON -- 打开
Begin TransAction
Insert Into Person(PersonId,PersonName)Values('1','Name1')
Insert Into Person(PersonId,PersonName)Values('1','Name1')
Insert Into Person(PersonId,PersonName)Values('3','Name3')
Commit TransAction
SET XACT_ABORT OFF -- 关闭
/*
Try Catch 配合事务使用
Select * From Person
*/
Begin Try
Begin TransAction
Insert Into Person(PersonId,PersonName)Values('1','Name1')
Insert Into Person(PersonId,PersonName)Values('1','Name1')
Insert Into Person(PersonId,PersonName)Values('3','Name3')
Commit TransAction
End Try
Begin Catch
Rollback TransAction
End Catch
/*
使用全局变量@@Error 配合事务使用
Select * From Person
*/
DECLARE @tran_error int;
SET @tran_error = 0;
Begin TransAction
Insert Into Person(PersonId,PersonName)Values('1','Name1')
SET @tran_error = @tran_error + @@ERROR;
print(@tran_error);
Insert Into Person(PersonId,PersonName)Values('1','Name1')
SET @tran_error = @tran_error + @@ERROR;
print(@tran_error);
Insert Into Person(PersonId,PersonName)Values('3','Name3')
SET @tran_error = @tran_error + @@ERROR;
print(@tran_error);
IF(@tran_error > 0)
BEGIN
--执行出错,回滚事务
ROLLBACK TransAction;
END
ELSE
BEGIN
--没有异常,提交事务
COMMIT TransAction;
END
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154838.html原文链接:https://javaforall.cn