事物与游标

事务

:将若干条SQL指令作为一个整体交给数据库执行,要么全部执行,要么全部撤销。
原子性/一致性/隔离性/持久性
-1-
显示事物
/–使用事务进行解决–/
–开始一个事务
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

-2-
自动提交事物
-3-
隐式事物

-游标-

游标:一种能从多条数据记录的结果集中每次提取一条记录的机制。
-允许定位到结果集中的特定行
-从结果集的当前位置检索一行或多行
-支持对结果集中当前位置的行进行修改

T-SQL游标

API游标

客户端游标

游标基本操做
/–语法结构–/
–DECLARE cursor_name –游标名
–CURSOR [LOCAL | GLOBAL] –全局或局部的
–[FORWARD ONLY | SCROLL] –游标滚动方式
–[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC] –游标读取方式
–FOR SELECT_statements –查询语句
–[FOR UPDATE [OF Column_name[,….N]]] –可更改字段

/*--使用游标--*/
    --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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值