在日常应用中通常需要多人执行多表的操作,比如售票系统的售票功能,这时候就涉及到数据读取的一致性问题,好在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

最新文章

  1. SQLServer地址搜索性能优化例子
  2. XUnit - Shared Context between Tests
  3. css-css权威指南学习笔记5
  4. 浅谈Javascript事件模拟
  5. DELL服务器系统安装
  6. C++异常机制知识点
  7. js,css压缩工具
  8. 山东省赛A题:Rescue The Princess
  9. 团队作业9——测试与发布(Beta版本)(含展示博客)
  10. 解决:安装oracle客户端,提示“oracle11g所选的主目录位于基目录外”
  11. 20175209 《Arrays和String单元测试》
  12. centos服务器监控 服务器虚拟机里面的客户端zabbix-agent安装
  13. Knockout.js快速学习笔记
  14. linux的system () 函数详解
  15. Add Microsoft SQL JDBC driver to Maven(转)
  16. dig 命令
  17. <<APUE>> 线程
  18. PDNN安装与使用
  19. ubuntu下面的某些软件安装
  20. 在mvc返回JSON时出错:序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用 的解决办法

热门文章

  1. ASP.NET MVC 提供与访问 Web Api
  2. DBENV->open
  3. 关于前端js拼接字符串的一点小经验
  4. 并不对劲的manacher算法
  5. BZOJ_2118_墨墨的等式_最短路
  6. UI:SQL语句
  7. 洛谷P1552 [APIO2012]派遣(左偏树)
  8. typedef struct和struct 的区别 用途
  9. mysql远程备份
  10. python模拟登录的实现