事物处理

一、事务的概念

概念:数据库中的事物是一种机制,是一个不可分割的工作逻辑单元

属性:1、原子性:哥哥元素是不可分的

2、一致性:所有的数据都保持一致状态

3、隔离性:对数据进行修改的所有并发事务是彼此隔离的

4、持久性:操作结果对于系统的影响应该是永久的

作用:要么所有作用全部完成,要么所有操作全部不执行,这样一来,要么增加和减少的廋执行完毕,一旦出错,就回滚到什么都没有执行的状态

二、创建事务

1、显示事务

开始事务:begin transaction

提交事务:commit transaction

回滚事务:rollback transaction

2、隐式事务

set implicit_trasactions on 开启

commit transaction

rollback transactioni

三、创建事务的原则

1、事务要尽可能短

2、访问的数据尽量少

3、浏览数据时尽量不要打开事务

4、在事务处理期间尽量不要请求用户输入

  

use Bank
go
--判断存储过程是否存在
if object('proc_transfer','procedure') is not null
    drop procedure proc_transfer
go
--转账的存储过程
create procedure proc_transfer
       @intoAccountName varchar(20),--转入账户
      @outAccountName varchar(20),--转出账户
      @money money--转出金额
as
--判断转户名是否存在
if not exists(select 1 from AccountInfo where accountName=@intoAccountName)
       begin
              print '转入账户不存在'
              return
       end
if not exists(select 1 from AccountInfo where accountName=@outcountName)
       begin
              print '转入账户不存在'
              return
       end
declare @errorSum int--声明一个变量,用于累加错误
set @errorSum=0 --初始化,没有错误
begin transaction  --开始事务
--执行update语句
update AccountInfo set currentMoney=currentMoney-@money
where accountName=@outAccountName
set @errorSum=@errorSum+@@error  --累加错误
update AccountInfo ser currentMoney=currentMoney+@money where
accountName=@intoAccountName
set @errorSum=@errorSum+@@error  --累加错误
if @errorSum<>0
   begin
          print '转账失败,回滚事务'
          rollback transaction
   end
else
    begin
           print '转账成功'
           commit transction
    end
go

五、事务的级别

1、read uncommitted 不隔离数据

2、read committed(默认)不允许读取没有提交的数据

3、repeatable read

4、snapshot快照隔离

5、serializable讲事务所要用到的数据表全部锁定

语法

set transaction isolation level 隔离级别(以上5种)

T-SQL语句

原文地址:https://www.cnblogs.com/dclcc/p/3075295.html