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