• SQLServer第八章:事务处理 transaction


    事务:是一种机制,独立的工作单元,保证结果只产生成功或失败

    特性(ACID):
      原子性:要么成功,要么失败
      一致性:操作前后表中数据是一致的
      隔离性:当前事务操作的数据,对其它事务是隔离的
      持久性:一旦提交到服务器就是永久性的,不能回滚

    事务的分类:
      显式事务: 一个功能,需要多个sql语句共同完成
        开启事务:begin transaction(tran)
        提交事务:commit transaction
        回滚事务:rollback transaction
      隐式事务:
        自动提交事务(默认):sql中默认每个sql都是一个单独的事务

    创建一个表做演示

    if exists(select * from sys.objects where name='accountInfo')
    begin
        drop table accountInfo
    end
    go
    create table accountInfo
    (
        id int primary key identity,
        accountName varchar(10) not null,
        balance money check(balance>=1) not null
    )
    go
    --添加两个帐户
    insert into accountInfo values('韦小宝',5000000)
    insert into accountInfo values('梅超风',6000000)
    go
    select * from accountInfo

    事务处理语句

    --定义变量累加错误号
    declare @error_num int
    set @error_num = 0
    --事务来处理转帐
    --开启事务
    begin transaction
    
    update accountInfo set balance=balance+5000000 where accountName='韦小宝'
    --累加错误号:上面不报错,所以不会累积事务
    set @error_num=@error_num+@@ERROR
    
    update accountInfo set balance=balance-5000000 where accountName='梅超风'
    --累加错误号:前面已经限制钱>=1使用,这里就会报错,则累积一个事务
    set @error_num=@error_num+@@ERROR
    --@@ERROR:当前一个语句遇到错误,则返回错误号,否则返回0。需要注意的是@ERROR在每一条语句执行后会被立刻重置,因此应该在要验证的语句执行后检查数值或者是将它保存到局部变量中以备将来使用。
    if(@error_num =0)
    begin
        --提交
        commit transaction
        print '转帐成功'
    end
    else
    begin
        --回滚
        rollback transaction
        print '转帐失败'
    end
    
    select * from accountInfo
  • 相关阅读:
    MyEclipse错误积累--持续更新
    Git错误积累-持续更新
    MySQL错误积累-持续更新
    评价一个人,就是要看他把时间都花在哪了
    收集的yum命令博文
    Github 常用命令
    python库收藏
    [转载]Scikit Learn: 在python中机器学习
    Windows下python安装Matplotlib、Numpy和Scipy模块
    [LeetCode] #45 Jump Game II
  • 原文地址:https://www.cnblogs.com/longxinyv/p/16705763.html
Copyright © 2020-2023  润新知