• SQL 16.事务


    指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)--也就是由多个sql语句组成,必须作为一个整体执行
    这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行
    语法步骤:
    开始事务:BEGIN TRANSACTION
    事务提交:COMMIT TRANSACTION
    事务回滚:ROLLBACK TRANSACTION
    判断某条语句执行是否出错:
    全局变量@@ERROR;
    @@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;
             例:SET @errorSum=@errorSum+@@error

    如,借钱问题:
        假定钱从A转到B,至少需要两步:

    • A的资金减少
    • 然后B的资金相应增加   
    隐藏行号 复制代码 这是一段程序代码。
     
    UPDATE bank SET uMoney = uMoney - 1000
    WHERE uName= '家宝'
    @@error
    UPDATE bank SET uMoney = uMoney + 1000
    WHERE uName= '奥巴马'
    @@error
    --查看结果。
    SELECT * FROM bank
    CREATE TABLE bank
    (
    uName CHAR(10),  --姓名
    uMoney MONEY     --当前余额
    )
    GO
    ALTER TABLE bank
    ADD CONSTRAINT CK_nowMoney    
    CHECK(uMoney>=1)
    GO
    INSERT INTO bank(uName, uMoney)
    VALUES('家宝',1000)
    INSERT INTO bank(uName, uMoney)
    VALUES('奥巴马',1)


    例题:

    1.表category

    select * from category

    image

    2.建立约束c_name名字不小于2个字

    image

    3.执行下列语句报错

    update category set c_name = '1' where c_id =1

    image

    4.写事务

    declare @errNum int
    set @errNum=0
    begin transaction      --先开始事务
    update category set c_name = '1' where c_id =1
    set @errNum =@errNum +@@error
    delete from Category where c_id =120
    set @errNum =@errNum +@@error
    if @errNum=0
    begin
        commit transaction
        print 'OK!'
    end
    else
    begin
        rollback transaction
        print 'ERROR!'
    end
    select * from category

    执行结果:

    image

    结果:c_id=120也没有删除

    image

  • 相关阅读:
    poj1417(带权并查集+背包DP+路径回溯)
    poj1182(带权并查集)
    hdoj3038(带权并查集)
    poj1611(并查集简单应用)
    poj2236(并查集)
    莫队板子,例题
    离散化二维坐标
    P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    树链剖分板子
    P2486 [SDOI2011]染色 区间合并+树链剖分(加深对线段树的理解)
  • 原文地址:https://www.cnblogs.com/tangge/p/2654332.html
Copyright © 2020-2023  润新知