News center
资讯中心
资讯中心当前位置:首页>>资讯详情
SqlServer数据库事务的案例与详解
发布:武汉灵犀教育发布时间:2021-07-10
事务的特性:
原子性(Atomicity):事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行一致性(Consistency):当事务完成时,数据必须处于一致状态
隔离性(Isolation):并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务
永久性(Durability):事务完成后,它对数据库的修改被永久保持
数据库三种事务:
1、自动提交事务:是SQL Server默认的一种事务模式,每条Sql语句都被看成一个事务进行处理,你应该没有见过,一条Update 修改2个字段的语句,只修该了1个字段而另外一个字段没有修改。。
2、显式事务:T-sql标明,由Begin Transaction开启事务开始,由Commit Transaction 提交事务、Rollback Transaction 回滚事务结束。
3、隐式事务:使用set implicit_transactions on 将将隐式事务模式打开,不用Begin Transaction开启事务,当一个事务结束,这个模式会自动启用下一个事务,只用Commit Transaction 提交事务、Rollback Transaction 回滚事务即可。
事务案例:
use bankdb --使用
go
create table bank(
bankID varchar(20) primary key not null,
name varchar(20) not null,
accountMoney money check(accountMoney>=1)
);
insert into bank
select '100001','张三',1000 union
select '100002','李四',1000 union
select '100003','王五',1000
select * from bank;--查看结果
隐式事务:
update bank
set accountmoney=accountmoney+500
where bankid=100001
set implicit_transactions on --on开: off:关
commit transaction;--提交 transaction可以省略
rollback transaction; --回滚transaction可以省略
显示事务:
开始事务:BEGIN TRANSACTION
提交事务:COMMIT TRANSACTION
回滚(撤销)事务:ROLLBACK TRANSACTION
使用全局变量@@ERROR
SET @errorSum=@errorSum+@@ERROR
--开始事务
begin transaction
declare @errorNum int=0 --定义存放错误结果
update bank
set accountmoney=accountmoney-1000
where bankid='100001'
set @errorNum=@errorNum+@@error
update bank
set accountmoney=accountmoney+1000
where bankid='100002'
set @errorNum=@errorNum+@@error
if @errorNum<>0
begin
rollback transaction;
end
else
begin
commit transaction;
end;
--查看转账事务后的余额
SELECT * FROM bank