第五章总结

1事务特点

原子,隔离,一致,永久

    /*--转帐测试:张三转账1000元给李四--*/
        --我们可能会这样这样编写语句
        --张三的帐户少1000元,李四的帐户多1000元
        UPDATE bank SET currentMoney = currentMoney - 1000 WHERE customerName = '张三'
        UPDATE bank SET currentMoney = currentMoney + 1000 WHERE customerName = '李四'
        GO

        --再次查看转帐后的结果。
        SELECT * FROM bank
        GO

    /*--使用事务进行解决--*/
        --开始一个事务
        BEGIN TRANSACTION tran_bank    --也可简写为begin tran tran_bank
        --定义一个用于记录错误的变量
        DECLARE  @tran_error INT
        SET @tran_error = 0
        --在张三的账户减去
        UPDATE bank SET currentMoney = currentMoney - 10000 WHERE customerName = '张三'
        SET @tran_error = @tran_error + @@error
        --在李四的账户增加
        UPDATE bank SET currentMoney = currentMoney + 10000 WHERE customerName = '李四'
        SET @tran_error = @tran_error + @@error
        IF @tran_error <> 0
            BEGIN
                --执行出错,回滚事务
                ROLLBACK TRANSACTION
                PRINT '转账失账,交易已取消'
            END
        ELSE
            BEGIN
                --没有发现错误,提交事务
                COMMIT TRANSACTION
                PRINT '交易成功,已保存新数据'
            END
        GO
            
        --再次查看转帐后的结果。
        SELECT * FROM bank
        GO

--1.声明游标
            DECLARE bank_cursor
            CURSOR LOCAL
            scroll
            FOR SELECT * FROM bank
            --FOR SELECT customerName,currentMoney FROM bank  --获取部分列

--2.打开该游标
            OPEN bank_cursor

  --3.读取游标
            --定义个变量,用于存放游标中读取出来的值
            DEClARE @id int
            DECLARE @name CHAR(10)
            DECLARE @money MONEY
            --读取游标的第一条记录行,并存放在变量中
            FETCH first FROM bank_cursor INTO @id,@name,@money
            --循环读取游标中的记录
            PRINT '读取的数据如下:'
            WHILE (@@fetch_status = 0)
            BEGIN
                --用print输出读取的数据
                PRINT '账户名:' + @name + '    余额:' +  convert(VARCHAR,@money)
                --update bank set currentMoney = currentMoney+1000 where customerId = @id
                --读取下一条记录行
                FETCH next FROM bank_cursor INTO @id,@name,@money
            END

--4.读取完成后关闭游标
            CLOSE bank_cursor

--5.释放游标
            DEALLOCATE bank_cursor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值