在sqlcommend中怎么使用事务
发布网友
发布时间:2022-04-08 08:28
我来回答
共1个回答
热心网友
时间:2022-04-08 09:57
SQL命令行使用事务大多和异常处理机制合用,以防事务中的多条语句部分被执行,这样数据的一致性将被破坏,给程序造成很大的漏洞。
begin try | end try语句块中是对可能出现错误的语句进行测试。
begin catch | end catch语句块用来捕获try语句块中出现的错误。
begin tran开始一个新的事务
commit tran语句用来显示的提交事务中的语句
rollback语句可以进行回滚操作,rollback和commit配合,以保证事务中的所有语句要么全部成功,要么全部失败,从而使数据的一致性得到保证。
事务语法:
begin tran -- 开始事务
commit tran -- 提交事务
事务与错误机制语法:
begin try -- 开始try语句块
begin tran -- 开始一个新的事物
-- 事务中的多条语句
commit tran -- 提交事务
end try -- 结束try语句块
begin catch -- 开始catch语句块
rollback -- 事务回滚
end catch -- 结束catch语句块
例:
-- 创建users数据表
create table users
(
id int identity(1, 1) primary key,
userName varchar(20) unique not null,
age int check (age between 1 and 100)
)
go
-- 启用事务和异常处理机制插入信息
begin try
begin tran
insert into users values ('张三', 21)
select '1'
insert into users values ('张三', 20) -- 创建users数据表时,对userName采用了唯一性索引,所以这句insert语句将不会提交成功。
select '2'
commit tran -- 提交事务,由于前面第二个insert语句错误,所以将被catch捕获
select '事务成功'
end try
begin catch
rollback -- 捕获到前面出现的错误,执行rollback回滚操作,第一条执行成功的insert语句插入的数据也将被回滚(注:由insert语句占用的自动编号ID被作废,所以会出现ID不连续的情况)
select '事务失败'
end catch
go
例二:
-- 回滚到某一保存点(还原点)
begin tran tran_name
begin try
insert into users values ('abc', 10)
print 'abc ok'
end try
begin catch
rollback
end catch
save tran t1 -- 设置一个还原点
begin try
insert into users values ('xyz', 11)
print 'xyz ok'
insert into users values ('abc', 31)
print 'xxx ok'
end try
begin catch
rollback tran t1 -- 将事务回滚到还原点
end catch
commit tran
go