sqlserver用timestamp帮助解决数据并发冲突

sqlserver用timestamp帮助解决数据并发冲突,第1张

概述关于并发请求,网上很多朋友都说的很详细了,我就不在这里献丑了。这里只记录下刚刚完工的那个项目里自己是如何用timestamp处理的,以备日后不时之需。 在sqlserver里有个timestamp的字段类型,如果我们需要对某个数据表进行并发请求的处理,以防止出现两个用户同时修改表中同一条数据造成冲突的情况。这时可以给该表添加一个timestamp的字段,当添加、修改数据的时候,timestamp类

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

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


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

详细 *** 作的sql命令如下:

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

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帮助解决数据并发冲突全部内容,希望文章能够帮你解决sqlserver用timestamp帮助解决数据并发冲突所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1160769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存