这个问题当然适用于更广泛的范围,但现在就是这样.
我有一个基本的电子商务应用程序,用户可以自然地下订单.所述订单需要有一个唯一的编号,我现在正试图生成.
每个订单都是特定于供应商的.基本上,我有一个OrderNumberInfo(VendorID,OrderNumber)表.现在,只要客户下订单,我就需要为特定供应商增加OrderNumber并返回该值.当然,我不希望其他进程干扰我,所以我需要以某种方式独占锁定这一行:
begin tranaction declare @n int select @n = OrderNumber from OrderNumberInfo where VendorID = @vendorID update OrderNumberInfo set OrderNumber = @n + 1 where OrderNumber = @n and VendorID = @vendorID commit transaction
现在,我已经阅读了关于选择…使用(updlock rowlock),悲观锁定等等,但是不能将所有这些都放在一个连贯的图片中:
>这些提示如何与sql Server 2008s的快照隔离一起使用?
>他们是否执行行级,页级甚至表级锁?
>这如何容忍多个用户尝试为单个供应商生成数字?
>这里适合哪种隔离级别?
>一般而言 – 做这些事情的方法是什么?
编辑
只是为了让事情更清楚:
>在应用程序的这个特定角落的性能绝对不是问题:订单将相对不频繁地进行,并且将涉及对供应商的Web服务的昂贵调用,因此1秒延迟是相当容忍的
>我们确实需要让每个供应商的订单号都是独立和顺序的