http://blog.csdn.net/u011014032/article/details/42936783

关于并发请求,网上很多朋友都说的很详细了,我就不在这里献丑了。这里只记录下刚刚完工的那个项目里自己是如何用timestamp处理的,以备日后不时之需。

在sqlserver里有个timestamp的字段类型,如果我们需要对某个数据表进行并发请求的处理,以防止出现两个用户同时修改表中同一条数据造成冲突的情况。这时可以给该表添加一个timestamp的字段,当添加、修改数据的时候,timestamp类型会自动生成一个新值,此时我们把timestamp字段的值也作为update的where子条件之一就可以避免覆盖其他用户的修改行为了。

比如我有个产品表products,里面有个字段为buyer表示买家ID,如果某个客户购买了商品,就会在相应的products的buyer里记录下自己的id,但是如果有两个顾客同时都购买了某个商品(其实他们提交请求的时间是有差别的,但很可能就相隔几毫秒,计算机能感知到,而人却感知不到),同时向该商品的buyer里写入自己的id,那么就会造成冲突,这时候我们应该优先处理时间稍微靠前的用户,并且通知时间稍微靠后的用户其他用户已经购买。

详细操作的SQL命令如下:

1、用户访问宝贝详情页,从数据库中读取宝贝信息,这其中就包括字段名为rowVersion的timestamp字段类型的值(注意:要将rowVersion转换成SQL中的长整型,以便后面比对),这时两个用户获取到的rowVersion的值是相同的。

  1. select productID,name,price,convert(bigint,fp.rowVersion) as version from products where productID=1058

这一步要在程序中记录下rowVersion的值,比如我们可以存到一个string类型的字段里,如:strRowVersion =  reader["version "].ToString();

2、用户修改buyer为自己的ID

update products set buyer=35 where productID=1058 and rowVersion = @version

这一步中我们可以向SQL语句中传入刚刚记录下的rowVersion值,如果是前一个用户保存成功,那么rowVersion值就会自动改变。这时候后一个用户也用相同的SQL语句来修改的话就会失败,然后我们可以向用户提示该商品已被其他用户购买。

sqlserver用timestamp帮助解决数据并发冲突 转【转】的更多相关文章

  1. mysql:如何解决数据修改冲突(事务+行级锁的实际运用)

    摘要:最近做一个接诊需求遇到一个问题,假设一个订单咨询超过3次就不能再接诊,但如果两个医生同时对该订单进行咨询,查数据库的时候查到的接诊次数都是2次,那两个医生都能接诊,所谓接诊可以理解为更新了接诊次 ...

  2. LVS解决高并发,大数据量

    http://www.360doc.com/content/14/0726/00/11962419_397102114.shtml LVS的全称Linux vitual system,是由目前阿里巴巴 ...

  3. EF|CodeFirst数据并发管理

    在项目开发中,我们有时需要对数据并发请求进行处理.举个简单的例子,比如接单系统中,AB两个客服同时请求处理同一单时,应该只有一单请求是处理成功的,另外一单应当提示客服,此单已经被处理了,不需要再处理. ...

  4. Linq to Sql并发冲突及处理策略

    0. 并发冲突的示例 单用户的系统现在应该比较罕见了,一般系统都会有很多用户在同时进行操作:在多用户系统中,涉及到的一个普遍问题:当多个用户“同时”更新(修改或者删除)同一条记录时,该如何更新呢?   ...

  5. LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对

    回到目录 在上一篇文章中提到了并发冲突,还说详细的说明在这讲来说,呵呵,那现在就说一下吧! 并发冲突产生的原因 事实上,linq to sql中的并发冲突是指记录在进行update操作时,客户端A1取 ...

  6. 用CAS方案解决高并发一致性问题

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt395 缘起:在高并发的分布式环境下,对于数据的查询与修改容易引发一致性问题, ...

  7. asp.net core 系列之并发冲突

    本文介绍如何处理多个用户并发更新同一实体(同时)时出现的冲突 . 主要是两种:一种,检查属性并发冲突,使用 [ConcurrencyCheck] ;另一种,检测行的并发冲突,使用 rowversion ...

  8. Oracle的数据并发与一致性详解(下)

    上篇介绍了数据并发与一致性的相关概念.以及oracle的事务隔离级别等内容,本篇继续介绍锁机制.自动锁.手动锁.用户自定义锁的相关内容. 请尊重作者劳动成果,转载请标明原文链接: https://ww ...

  9. Oracle的数据并发与一致性详解(上)

    今天想了解下oracle中事务与锁的原理,但百度了半天,发现网上介绍的内容要么太短,要么版本太旧,而且抄袭现象严重,所以干脆查官方帮助文档(oracle 11.2),并将其精华整理成中文,供大家一起学 ...

随机推荐

  1. arm中断体系结构

     ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:                   复位异常(Reset).     数据异常(Data Abort).     快速中断异常(FIQ) ...

  2. Vue学习四:v-if及v-show指令使用方法

    本文为博主原创,未经允许不得转载: <!DOCTYPE html> <html lang="zh"> <head> <meta http- ...

  3. 数据结构和算法with Python

    http://www.math.pku.edu.cn/teachers/qiuzy/ds_python/courseware/index.htm

  4. 1、Keepalived及VRRP原理介绍

    keepalived:即在linux中vrrp协议的实现 http://www.keepalived.org/ 什么是Keepalived?  Keepalived是一个用C语言编写的路由软件.该项目 ...

  5. 每天一个小程序—0014题(txt 转 Excel)

    基础知识:Excel文件的后缀有xls和xlsx,前者是针对2003版本的,2007及其之后的版本是xlsx. 在python中对于这两种不同后缀的文件有不同的库来处理,对于xls用wlrd.xlwt ...

  6. Tarjan模板题——牛的舞会

    题目描述 约翰的N (2 <= N <= 10,000)只奶牛非常兴奋,因为这是舞会之夜!她们穿上礼服和新鞋子,别 上鲜花,她们要表演圆舞. 只有奶牛才能表演这种圆舞.圆舞需要一些绳索和一 ...

  7. 封装微信小程序支付

    <?php /** * User: Eden * Date: 2019/3/21 * 共有内容 */ namespace Common\Service; use Think\Exception; ...

  8. Uncaught TypeError: (intermediate value)(...) is not a function 上一个方法结束没有加分号; 代码解析报错

    Uncaught TypeError: (intermediate value)(...) is not a function 别忽略了,  第一个方法后面的结束 分号; 不起眼的,引来麻烦, 哎,规 ...

  9. Android集成人脸识别demo分享

    本应用来源于虹软人工智能开放平台,人脸识别技术工程如何使用? 1.下载代码 git clone https://github.com/andyxm/ArcFaceDemo.git 2.下载虹软人脸识别 ...

  10. 基于虹软sdk,java实现人脸识别(demo)

    ## 开发环境准备:###开发使用到的软件和工具:* Jdk8.mysql5.7.libarcsoft_face.dll(so).libarcsoft_face_engine.dll(so).liba ...