zoukankan      html  css  js  c++  java
  • MSSQL数据库事务处理

    在日常应用中通常需要多人执行多表的操作,比如售票系统的售票功能,这时候就涉及到数据读取的一致性问题,好在MSSQL数据库也提供了事务处理功能,这里就简单的记下

    语法:

    Begin Tran

    //事务处理语句

    if判断

    begin

    {

    RollBack tran

    }

    end

    else

    bein

    Commit tran

    end

    注:事务的begin没有end来配对

    下面以旅客购票来举例:Tickets表为车票余量表(id,remaining),剩余票数有一个约束不能小于0,UserTicket为旅客购票表(userid,quantity)

    假设当前剩余的票数为2,有两个旅客A、B同时操作购票,A要两张,B要1张

    A旅客购票语句:

    Insert into UserITicket values ('A',2)

    Update Tickets set(Remaining=remaining-2)

    B旅客购票语句:

    Insert into UserITicket values ('B',1)

    Update Tickets set(Remaining=remaining-1)

    显然B旅客更新车票余量表的时候会发生错误,提示与系统约束不一致问题,但是B旅客的购票记录会插入成功,这明显与现实不符。下面用事务来处理这个问题:

    Declare @error int=0--声明一个变量来捕获错误

    Begin tran--打开一个事务

    --执行事务

    Insert into UserITicket values ('B',1)

    set @error=@error+@@error--捕获错误代码

    Update Tickets set(Remaining=remaining-1)

    set @error=@error+@@error

    if(@error>0)--说明事务执行的时候发生了错误

    begin

    rollback tran--回滚事务,撤销之前的操作

    end

    else

    begin

    Commit tran--执行正常,确认之前的操作

    end

  • 相关阅读:
    适配器
    MouseListener
    键盘事件KeyListener
    【转】CxImage图像库的使用
    【转】Qt Mode/View
    【转载】VC++中的图像类型转换--使用开源CxImage类库
    Qt5 文本编辑
    【转载】设备坐标(窗口/window)和逻辑坐标(视口/viewport)
    【转载】Qt中的QString,QByteArray,Qchar, char*
    QT中QWidget、QDialog及QMainWindow的区别
  • 原文地址:https://www.cnblogs.com/chenhuadan/p/7665806.html
Copyright © 2011-2022 走看看